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 # ...
你還能夠手動的調整設置面板中的項目,具體參見settings
code
參見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