Python Kivy kv文件的行为不同于Builder.load\u字符串
我正在尝试在kivy上实现一个2屏应用程序。我遵循了他们的示例,如果在main.py中调用“Builder.load_string”,它就会起作用 然而,如果我注释掉它并创建一个.kv文件,我只会得到一个空白屏幕。我做错了什么Python Kivy kv文件的行为不同于Builder.load\u字符串,python,kivy,Python,Kivy,我正在尝试在kivy上实现一个2屏应用程序。我遵循了他们的示例,如果在main.py中调用“Builder.load_string”,它就会起作用 然而,如果我注释掉它并创建一个.kv文件,我只会得到一个空白屏幕。我做错了什么 from kivy.app import App from kivy.lang import Builder from kivy.uix.screenmanager import ScreenManager, Screen #Builder.load_string(""
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
#Builder.load_string("""
#<MainScreen>:
#BoxLayout:
#Button:
#text: 'Goto settings'
#on_press: root.manager.current = 'settings'
#Button:
#text: 'Quit'
#<SettingsScreen>:
#BoxLayout:
#Button:
#text: 'My settings button'
#Button:
#text: 'Back to menu'
#on_press: root.manager.current = 'main'
#""")
# Declare both screens
class MainScreen(Screen):
pass
class SettingsScreen(Screen):
pass
# Create the screen manager
sm = ScreenManager()
sm.add_widget(MainScreen(name='main'))
sm.add_widget(SettingsScreen(name='settings'))
class TestApp(App):
def build(self):
return sm
if __name__ == '__main__':
TestApp().run()
从kivy.app导入应用
从kivy.lang导入生成器
从kivy.uix.screenmanager导入screenmanager,屏幕
#生成器。加载\u字符串(“”)
#:
#盒子布局:
#按钮:
#文本:“转到设置”
#按:root.manager.current='settings'
#按钮:
#文本:“退出”
#:
#盒子布局:
#按钮:
#文本:“我的设置按钮”
#按钮:
#文本:“返回菜单”
#按:root.manager.current='main'
#""")
#声明两个屏幕
类主屏幕(屏幕):
通过
类别设置屏幕(屏幕):
通过
#创建屏幕管理器
sm=屏幕管理器()
sm.add_小部件(主屏幕(name='main'))
sm.add_小部件(设置屏幕(name='settings'))
类TestApp(应用程序):
def生成(自):
返回sm
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
TestApp().run()
这是testapp.kv
<MainScreen>:
BoxLayout:
Button:
text: 'Goto settings'
on_press: root.manager.current = 'settings'
Button:
text: 'Quit'
<SettingsScreen>:
BoxLayout:
Button:
text: 'My settings button'
Button:
text: 'Back to menu'
on_press: root.manager.current = 'main'
:
盒子布局:
按钮:
文本:“转到设置”
按:root.manager.current='settings'
按钮:
文本:“退出”
:
盒子布局:
按钮:
文本:“我的设置按钮”
按钮:
文本:“返回菜单”
按:root.manager.current='main'
在调用run时,但在build方法之前,由App类加载kv文件。在此之前(在应用程序类声明上方)实例化了小部件,因此kv规则尚未加载且不适用。要修复它,请将实例化移动到build方法
编辑:更改:
# Create the screen manager
sm = ScreenManager()
sm.add_widget(MainScreen(name='main'))
sm.add_widget(SettingsScreen(name='settings'))
class TestApp(App):
def build(self):
return sm
到
class TestApp(App):
def build(self):
# Create the screen manager
sm = ScreenManager()
sm.add_widget(MainScreen(name='main'))
sm.add_widget(SettingsScreen(name='settings'))
return sm