『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

參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM