.kv 文件似乎不起作用
.kv file doesn't seem to work
所以我只是在使用一些示例 Kivy 文件代码,我遇到了允许用户在屏幕之间切换的代码:
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
Builder.load_string("""
<MenuScreen>:
BoxLayout:
Button:
text: 'Build Scenario'
on_press: root.manager.current = 'settings'
Button:
text: 'Run Existing Scenerio'
<SettingsScreen>:
BoxLayout:
Button:
text: 'Run Existing Scenerio'
Button:
text: 'Back to menu'
on_press: root.manager.current = 'menu'
""")
# Declare both screens
class MenuScreen(Screen):
pass
class SettingsScreen(Screen):
pass
# Create the screen manager
sm = ScreenManager()
sm.add_widget(MenuScreen(name='menu'))
sm.add_widget(SettingsScreen(name='settings'))
class TestApp(App):
def build(self):
return sm
if __name__ == '__main__':
TestApp().run()
我想知道是否可以将 Builder.load_string() 方法中给出的代码放入一个单独的 .kv 文件中。所以我就这么做了。我将 Builder 部分注释掉(我承认我不知道它的作用是什么)并将字符串复制到一个 .kv 文件中,如下所示:
# the file name is test.kv
#:kivy 1.0.9
<MenuScreen>:
BoxLayout:
Button:
text: 'Build Scenario'
on_press: root.manager.current = 'settings'
Button:
text: 'Run Existing Scenerio'
<SettingsScreen>:
BoxLayout:
Button:
text: 'Run Existing Scenerio'
Button:
text: 'Back to menu'
on_press: root.manager.current = 'menu'
不幸的是,当我 运行 现在的代码时,我只得到一个黑屏。谁能告诉我怎么了?谢谢!
代码在 python 文件的主体中创建屏幕管理器 (sm
)。当从文件加载 kv 时,这只会在稍后发生,因此 none 的 kv 规则将应用于 sm
。之前没问题,因为 load_string 发生在实例化之前。
因此,以这种方式实例化小部件是不好的做法,sm = ScreenManager(...
等应移至构建方法。这是加载 kv 文件后 运行,所以一切正常。
所以我只是在使用一些示例 Kivy 文件代码,我遇到了允许用户在屏幕之间切换的代码:
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
Builder.load_string("""
<MenuScreen>:
BoxLayout:
Button:
text: 'Build Scenario'
on_press: root.manager.current = 'settings'
Button:
text: 'Run Existing Scenerio'
<SettingsScreen>:
BoxLayout:
Button:
text: 'Run Existing Scenerio'
Button:
text: 'Back to menu'
on_press: root.manager.current = 'menu'
""")
# Declare both screens
class MenuScreen(Screen):
pass
class SettingsScreen(Screen):
pass
# Create the screen manager
sm = ScreenManager()
sm.add_widget(MenuScreen(name='menu'))
sm.add_widget(SettingsScreen(name='settings'))
class TestApp(App):
def build(self):
return sm
if __name__ == '__main__':
TestApp().run()
我想知道是否可以将 Builder.load_string() 方法中给出的代码放入一个单独的 .kv 文件中。所以我就这么做了。我将 Builder 部分注释掉(我承认我不知道它的作用是什么)并将字符串复制到一个 .kv 文件中,如下所示:
# the file name is test.kv
#:kivy 1.0.9
<MenuScreen>:
BoxLayout:
Button:
text: 'Build Scenario'
on_press: root.manager.current = 'settings'
Button:
text: 'Run Existing Scenerio'
<SettingsScreen>:
BoxLayout:
Button:
text: 'Run Existing Scenerio'
Button:
text: 'Back to menu'
on_press: root.manager.current = 'menu'
不幸的是,当我 运行 现在的代码时,我只得到一个黑屏。谁能告诉我怎么了?谢谢!
代码在 python 文件的主体中创建屏幕管理器 (sm
)。当从文件加载 kv 时,这只会在稍后发生,因此 none 的 kv 规则将应用于 sm
。之前没问题,因为 load_string 发生在实例化之前。
因此,以这种方式实例化小部件是不好的做法,sm = ScreenManager(...
等应移至构建方法。这是加载 kv 文件后 运行,所以一切正常。