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

标签 python kivy

所以我只是使用一些示例 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/

相关文章:

python - Kivy:如何让每个按钮播放不同的声音

python-2.7 - 如何在kivy中创建实时图?

python - kivy:如何更新对象属性?

python - 我应该如何测试字典将始终以相同的顺序排列?

Python 和 MySQLdb

python - MatPlotLib 中的 100% 堆叠条形图

python - 如何使用 python 对连续对中的字符串进行标记?

python - 如何在 Python 中分割输入参数

Python kivy之二 GridLayout和Screen Manager

python - Kivy CheckBox 看起来像实心黑框(不是复选框)