App类是创建Kivy应用的基础。我们可以将其看成是Kivy运行循环当中的主入口。在绝大多数的例子中,你创建这个类的子类,然后构建你自己的应用。当你已经准备好开始应用的整个生命周期时,你可以实例化你定制的app类,然后调用这个实例的run()方法。

创建一个应用

重载build()方法

为了使用一个widget树初始化你的应用,你需要重载build()方法,并返回你已经构建的widget树。

import kivy

kivy.require('1.8.0')

from kivy.app import App

from kivy.uix.gridlayout import GridLayout

class IndexScreen(GridLayout):

def __init__(self, **kwargs):

super(IndexScreen, self).__init__(**kwargs)

pass

# 这里不能直接使用App作为你自己创建的应用类的类名

class TestApp(App):

def build(self):

return IndexScreen()

if __name__ == '__main__':

TestApp().run()

使用kv文件创建应用

你也可以使用kivy语言创建应用。.kv文件可以同时包含规则以及根widget定义。

#:kivy 1.8.0

Button:

size: root.size

text: "Hello ,World"

import kivy

kivy.require('1.8.0')

from kivy.app import App

class MyApp(App):

pass

if __name__ == '__main__':

MyApp.run()

应用配置

使用配置文件

Kivy支持为你的应用创建独立的配置文件,如下所示:

class MyApp(App):

def build_config(self, config):

config.setdefaults('section1', {

'key1': 'value1',

'key2': 'value2'

})

系统将根据build_config方法中所提供的信息,自动创建名为my.ini的文件,并设置对应的配置信息。

[section1]

key2 = value2

key1 = value1

你也可以不使用build_config方法,而是直接创建my.ini文件,应用在运行的时候会自动加载这一文件。需要注意的是,配置文件的名字需要与你的应用类的前缀相匹配。

示例:应用设置面板

你可以扩展App.build_settings()方法创建你自己的设置面板。你可以参考settings找到具体创建的方法。

class MyApp(App):

def build_settings(self, settings):

jsondata = """

[

{ "type": "title",

"title": "Test application" },

{ "type": "options",

"title": "My first key",

"desc": "Description of my first key",

"section": "section1",

"key": "key1",

"options": ["value1", "value2", "another value"] },

{ "type": "numeric",

"title": "My second key",

"desc": "Description of my second key",

"section": "section1",

"key": "key2" }

]

"""

settings.add_json_panel('Test application', self.config, data=jsondata)

当你运行起来后,可以使用F1来启动设置面板。使用JSON的设置选项,将与之前创建的配置文件的内容相关联。你也可以在程序中调用App.open_settings()和App.close_settings()来开启或关闭你的设置面板。你在设置面板中的设置,将会自动保存到你的配置文件中。默认的,kivy的全局设置也会被加载到设置面板中,你可以使用如下声明关闭它:

class MyApp(App):

use_kivy_settings = False

# ...

你还可以手动的调整设置面板中的项目,具体参见settings

使用on_start 与 on_stop检测应用性能

import cProfile

class MyApp(App):

def on_start(self):

self.profile = cProfile.Profile()

self.profile.enable()

def on_stop(self):

self.profile.disable()

self.profile.dump_stats('myapp.profile')

定制设置界面

你可以通过设置App.settings_cls来选择多种不同的设置界面样式,你还可以创建自己的设置界面。具体参考kivy.uix.settings

你可以通过重载App.display_settings()来定制设置面板的显示,这个方法将会在设置面板在屏幕上显示之前被调用。如下所示:

def display_settings(self, settings):

try:

p = self.settings_popup

except AttributeError:

self.settings_popup = Popup(content=settings,

title='Settings',

size_hint=(0.8, 0.8))

p = self.settings_popup

if p.content is not settings:

p.content = settings

p.open()

def close_settings(self, *args):

try:

p = self.settings_popup

p.dismiss()

except AttributeError:

pass # Settings popup doesn't exist

最后,如果你想要替换目前的设置面板,你使用App.destroy_settings()可以移除到设置面板的内部索引。如果你已经更改App.display_settings(),你应该小心探测设置面板是否已经被替换。

暂停模式

这个模式是尝试性的,被设计用来针对手机与平板。可能会引起你的应用崩溃或者暂停。

在手机或者平板上,用户可能在任意的时候切换到另一个应用当中,这个时候,默认的,kivy会激活App.on_stop()事件。

如果你提供暂停模式,当切换到另一个应用的时候,你的应用将无限等待,直到用户切换回来。在Android上,有一个OpenGL的问题:当你暂停的时候,OpenGL ES Context不能确保被存储。存储OpenGL数据的机制并没有在Kivy中实现。

下面是一个暂停模式的示例:

class TestApp(App):

def on_pause(self):

# 你可以在这个存储数据

return True

def on_resume(self):

# 在这里你可以检查是否有需要替换的数据

pass

参考

python kivy事件_『Python Kivy』API说明:kivy.app相关推荐

  1. python画羊_『Python Kivy』官方乒乓球游戏示例解析

    本篇文章用于对Kivy框架官方所给出的一个「乒乓球」小游戏的源码进行简单地解析.我会尽可能的将方方面面的内容都说清楚.在文章的最下方为官方所给出的这个小游戏的教程以及游戏源码. 由于篇幅所限,本文只简 ...

  2. python多进程优化_『Python』多进程处理

    尝试学习python的多进程模组,对比多线程,大概的区别在: 1.多进程的处理速度更快 2.多进程的各个子进程之间交换数据很不方便 多进程调用方式 进程基本使用multicore() 进程池优化进程的 ...

  3. python pyqt教程_『开发技巧』PyQt5入门教程

    PyQt5相关 PyQt5是一套来自Digia的Qt5应用框架和Python的粘合剂.支持Python2.x和Python3.x版本.本教程使用Pyhton 3.Qt库是最强大的GUI支持库的一种.P ...

  4. 笨办法学python在线阅读_『笨办法』学Python 3

    领取成功 您已领取成功! 您可以进入Android/iOS/Kindle平台的多看阅读客户端,刷新个人中心的已购列表,即可下载图书,享受精品阅读时光啦! - | 回复不要太快哦~ 回复内容不能为空哦 ...

  5. python提醒事件_利用python实现短信和电话提醒功能的例子

    有时候,我们需要程序帮我们自动检测某些事件的发生 这个需求是广泛存在的 因此,这里整理了利用python实现短信和电话提醒功能的方法 主要需要完成以下4个步骤: - 安装核心库:twilio - 注册 ...

  6. python 概率分布模型_使用python的概率模型进行公司估值

    python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...

  7. python 时间序列预测_使用Python进行动手时间序列预测

    python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...

  8. python的pyaudio教程入门_『开发技巧』Python音频操作工具PyAudio上手教程

    『开发技巧』Python音频操作工具PyAudio上手教程 ​ 0.引子 当需要使用Python处理音频数据时,使用python读取与播放声音必不可少,下面介绍一个好用的处理音频PyAudio工具包. ...

  9. python音频分析工具_『开发技巧』Python音频操作工具PyAudio上手教程

    『开发技巧』Python音频操作工具PyAudio上手教程 ​ 0.引子 当需要使用Python处理音频数据时,使用python读取与播放声音必不可少,下面介绍一个好用的处理音频PyAudio工具包. ...

最新文章

  1. mysql查看当前实时连接数
  2. 强大自己,从学习开始!2020年最有内容的订阅号,每一个都是万里挑一!
  3. typeof instanceof 之间的区别总结
  4. 在同一台服务器上启动多个 FreeSWITCH 实例
  5. ABAP Subscreen and tabstrip controls
  6. linux小米随身wifi驱动下载,小米随身wifi驱动官方下载
  7. 如何添加地图控件到Windows Phone 8的页面中
  8. 人工智能、机器学习、深度学习的关系,终于有人讲明白了
  9. 最大公约数之辗转相除法
  10. c语言答辩ppt案例,c语言ppt例子课题了答辩ppt成品中南民族大学.ppt
  11. FFmpeg 视频裁剪
  12. 恩,今天把git和sublime结合了一下。。然后看了下《西部世界》
  13. 阿里云ECS云服务器实例重置-更换操作系统
  14. php易盾,内容审核统一管控!网易易盾智能审核管理系统开放试用
  15. ssm毕设项目酒店管理系统08281(java+VUE+Mybatis+Maven+Mysql+sprnig)
  16. jdbc.IncorrectResultSetColumnCountException: Incorrect column count: expected 1, actual 14
  17. 从零开始实现放置游戏(三):后台管理系统搭建
  18. 刚子扯谈:专注 极致 口碑 快
  19. PHP CURL解决 此图片来自QQ微信公众平台,未经允许不可引用
  20. android 使用内容提供者获取手机联系人

热门文章

  1. E-R模型和E-R图
  2. python一元线性回归
  3. 肌肽——在抗氧化上的功效
  4. linux 进程调度ppt,371Linux进程调度.PPT
  5. java实现数据库备份与恢复
  6. 分享一些量化投资的历史. 一些数据可能有些老,说得不对请多包涵
  7. jframe的简单用法
  8. GNOME 桌面顶部栏透明设置
  9. 如何学习一门新的语言?
  10. Linux 信号signal\sigaction