『Python Kivy』API说明:kivy.app.App
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检测应用性能
参见cProfile
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』API说明:kivy.app.App的更多相关文章
- 『Python进阶』专题汇总
		基础知识 Python3内置函数 『Python』库安装 『流畅的Python』第1~4章_数据结构.编码 『Python』基础数据结构常见使用方法 『Python CoolBook』数据结构和算法_ ... 
- 『Python CoolBook』Cython
		github地址 使用Cython导入库的话,需要一下几个文件: .c:C函数源码 .h:C函数头 .pxd:Cython函数头 .pyx:包装函数 setup.py:python 本节示例.c和.h ... 
- 『Python CoolBook』C扩展库_其一_用法讲解
		不依靠其他工具,直接使用Python的扩展API来编写一些简单的C扩展模块. 本篇参考PythonCookbook第15节和Python核心编程完成,值得注意的是,Python2.X和Python3. ... 
- 『Python CoolBook』C扩展库_其五_C语言层面Python库之间调用API
		点击进入项目 一.C层面模块添加API 我们仍然操作如下结构体, #include <math.h> typedef struct Point { double x,y; } Point; ... 
- 『Python CoolBook』C扩展库_其二_demo演示
		点击进入项目 C函数源文件 /* sample.c */ #include "sample.h" /* Compute the greatest common divisor */ ... 
- 『Python CoolBook』C扩展库_其六_从C语言中调用Python代码
		点击进入项目 一.C语言运行pyfun的PyObject对象 思路是在C语言中提供实参,传给python函数: 获取py函数对象(PyObject),函数参数(C类型) 获取GIL(PyGILStat ... 
- 『Python CoolBook』C扩展库_其六_线程
		GIL操作 想让C扩展代码和Python解释器中的其他进程一起正确的执行, 那么你就需要去释放并重新获取全局解释器锁(GIL). 在Python接口封装中去释放并重新获取全局解释器锁(GIL),此时本 ... 
- 『Python CoolBook』Cython_高效数组操作
		数组运算加速是至关科学计算重要的领域,本节我们以一个简单函数为例,使用C语言为python数组加速. 一.Cython 本函数为一维数组修剪最大最小值 version1 @cython.boundsc ... 
- 『Python基础』第2节: Python简介及入门
		一. Python介绍 Python是一门高级计算机程序设计语言,1989年,荷兰的Guido von Rossum创造了它.Guido是是一个牛人,1982年,他从阿姆斯特丹大学获得了数学和计算机硕 ... 
随机推荐
- luogu P3950 部落冲突
			嘟嘟嘟 树剖板子题. #include<cstdio> #include<iostream> #include<algorithm> #include<cma ... 
- PHP验证信用卡卡号函数
			/** * 验证银行卡号是否是信用卡 * @param $cardnumber * @return bool */ function validateCard ($cardnumber) { $car ... 
- Dos操作基础
			dos命令大全 使用技巧 dos命令不区分大小写,比如C盘的Program Files,在dos命令中完全可以用"program files"代替,加上英文引号是因为名称的中间有空 ... 
- PHP数组 转 对象/对象 转 数组
			/** * 数组 转 对象 * * @param array $arr 数组 * @return object */ function array_to_object($arr) { if (gett ... 
- logback配置详解和使用
			最近知道一种打印日志的新方法,在此做一下学习总结. 转自:行走在云端的愚公 https://www.cnblogs.com/warking/p/5710303.html 一.logback的介绍 ... 
- 解决FileUpload上传大文件报错
			<system.webServer> <security> <requestFiltering> <requestLimits maxAllowedConte ... 
- 【题解】洛谷P1315 [NOIP2011TG] 观光公交(前缀和+贪心)
			次元传送门:洛谷P1315 思路 思路大概想到了 可是代码实现却没想到 所以参考题解了 D2T3的贪心果然有难度 我们考虑在每次用加速器有两种情况 到下一个点还需要等待:以后的时间就不再影响了 到下一 ... 
- 课时22.br标签(掌握)
			br标签,如何在html中换行,可以使用br标签 1.br标签的作用:换行 2.br标签的格式:<br> 3.br标签的注意点: 3.1多个br标签可以连续使用,使用了多个br标签就会换多 ... 
- Flex 布局教程:语法和实例
			语法篇 网页布局(layout)是 CSS 的一个重点应用. 布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性.它对于那些特殊布局非常不方便, ... 
- 05 oracle中lock和latch的用途
			oracle中lock和latch的用途 本文向各位阐述Oracle的Latch机制,Latch,用金山词霸翻译是门插栓,闭锁,专业术语叫锁存器,我开始接触时就不大明白为什么不写Lock,不都是锁 ... 
