zoukankan      html  css  js  c++  java
  • 『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
    

    参考

  • 相关阅读:
    Java实现 蓝桥杯VIP 基础练习 完美的代价
    Java实现 蓝桥杯VIP基础练习 矩形面积交
    Java实现 蓝桥杯VIP 基础练习 完美的代价
    Java实现 蓝桥杯 蓝桥杯VIP 基础练习 数的读法
    Java实现 蓝桥杯 蓝桥杯VIP 基础练习 数的读法
    Java实现 蓝桥杯 蓝桥杯VIP 基础练习 数的读法
    Java实现 蓝桥杯 蓝桥杯VIP 基础练习 数的读法
    Java实现 蓝桥杯 蓝桥杯VIP 基础练习 数的读法
    核心思想:想清楚自己创业的目的(如果你没有自信提供一种更好的产品或服务,那就别做了,比如IM 电商 搜索)
    在Linux中如何利用backtrace信息解决问题
  • 原文地址:https://www.cnblogs.com/sitemanager/p/4117687.html
Copyright © 2011-2022 走看看