『Python Kivy』API說明:kivy.app.App

App類是建立Kivy應用的基礎。咱們能夠將其當作是Kivy運行循環當中的主入口。在絕大多數的例子中,你建立這個類的子類,而後構建你本身的應用。當你已經準備好開始應用的整個生命週期時,你能夠實例化你定製的app類,而後調用這個實例的run()方法。html

建立一個應用

重載build()方法

爲了使用一個widget樹初始化你的應用,你須要重載build()方法,並返回你已經構建的widget樹。python

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定義。json

#: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支持爲你的應用建立獨立的配置文件,以下所示:api

class MyApp(App):
    def build_config(self, config):
        config.setdefaults('section1', {
            'key1': 'value1',
            'key2': 'value2'
            })

系統將根據build_config方法中所提供的信息,自動建立名爲my.ini的文件,並設置對應的配置信息。app

[section1]
key2 = value2
key1 = value1

你也能夠不使用build_config方法,而是直接建立my.ini文件,應用在運行的時候會自動加載這一文件。須要注意的是,配置文件的名字須要與你的應用類的前綴相匹配。性能

示例:應用設置面板

你能夠擴展App.build_settings()方法建立你本身的設置面板。你能夠參考settings找到具體建立的方法。ui

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
    # ...

你還能夠手動的調整設置面板中的項目,具體參見settingscode

使用on_start 與 on_stop檢測應用性能

參見cProfilehtm

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

參考

相關文章
相關標籤/搜索