gpt4 book ai didi

python - .kv 文件似乎不起作用

转载 作者:行者123 更新时间:2023-11-30 23:08:58 27 4
gpt4 key购买 nike

所以我只是使用一些示例 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 时,这只在稍后发生,因此没有任何 kv 规则应用于 sm。之前还好,因为load_string发生在实例化之前。

因此,以这种方式实例化小部件是不好的做法,并且 sm = ScreenManager(... 等应移至 build 方法。这是在加载 kv 文件后运行的,所以一切都应该有效。

关于python - .kv 文件似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31464155/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com