编程kivy的最佳方式

Best way of programming kivy

我使用kivy并且是kv语言的粉丝。但是,我想不出将它与 python 代码集成的最佳方法。例如,这是一个简单的选项卡式屏幕,完全用 kv 语言定义。但是如何访问 python 中的 kv 项?假设我想按照按钮及其关联代码的指示切换选项卡。 'something' 和 'some header' 应该在 python 中是什么?

#Tabbed Control

import kivy
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout

class MainScreen(BoxLayout):  
    def Switch(self):
      # something.switch_to(some header)
      pass

class BasicApp(App):
    def build(self):
      return MainScreen()

if __name__ == '__main__':
   BasicApp().run()

有kv代码

#Tabbed Control

MainScreen:

<MainScreen>:
    TabbedPanel:
        do_default_tab: False

        TabbedPanelItem:
            text: 'Alpha'
            GridLayout:
                rows: 2
                Label:
                    text: 'Alpha content area'
                Button:
                    text: 'Switch to Beta'
                    on_press: root.Switch()
        TabbedPanelItem:
            text: 'Beta'
            BoxLayout:
                Label:
                    text: 'Beta content area'

我真的很想知道其他人在做什么。我知道可以在 python 代码中生成 kivy 对象。但是你失去了 kv 提供的简单、紧凑和分离。

描述一切here。您必须创建引用面板和目标选项卡的属性:

import kivy
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty

from kivy.lang import Builder
Builder.load_string('''
#Tabbed Control

<MainScreen>:
    tab_panel: tab_panel
    beta_tab: beta_tab
    TabbedPanel:
        id: tab_panel   
        do_default_tab: False

        TabbedPanelItem:
            text: 'Alpha'
            GridLayout:
                rows: 2
                Label:
                    text: 'Alpha content area'
                Button:
                    text: 'Switch to Beta'
                    on_press: root.Switch()
        TabbedPanelItem:
            text: 'Beta'
            id: beta_tab
            BoxLayout:
                Label:
                    text: 'Beta content area'
''')

class MainScreen(BoxLayout):  
    tab_panel = ObjectProperty(None)
    beta_pad = ObjectProperty(None)
    def Switch(self):
        self.tab_panel.switch_to(self.beta_tab)


class BasicApp(App):
    def build(self):
      return MainScreen()

if __name__ == '__main__':
   BasicApp().run()