编程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()
我使用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()