【问题标题】:Kivy Builder.load_file() not working as expectedKivy Builder.load_file() 没有按预期工作
【发布时间】:2019-12-31 16:17:17
【问题描述】:

我正在尝试运行一个小型 kivy 应用程序。当我使用 Builder.load_string() 时,我的应用程序运行正常,当我使用 Builder.load_file() 时,我得到的只是一个空白屏幕。这是我的代码

ma​​in.py - 使用 Builder.load_string()

from kivy.lang import Builder
from kivymd.app import MDApp
from kivymd.uix.chip import MDChip
from kivy.uix.screenmanager import ScreenManager, Screen


Builder.load_string("""
<MenuScreen>:
    BoxLayout:
        Button:
            text: 'Goto settings'
            on_press:
                root.manager.transition.direction = 'left'
                root.manager.current = 'settings'
        Button:
            text: 'Quit'

<SettingsScreen>:
    BoxLayout:
        Button:
            text: 'My settings button'
        Button:
            text: 'Back to menu'
            on_press:
                root.manager.transition.direction = 'right'
                root.manager.current = 'menu'
""")


class MenuScreen(Screen):
    pass


class SettingsScreen(Screen):
    pass


sm = ScreenManager()
sm.add_widget(MenuScreen(name='menu'))
sm.add_widget(SettingsScreen(name='settings'))


class MyWidget(MDChip):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)


class MainApp(MDApp):
    def __init__(self, **kwargs):
        self.title = "My Material Application"
        super().__init__(**kwargs)

    def build(self):
        return sm


if __name__ == "__main__":
    MainApp().run()

这是与 Builder.load_file() 相同的代码

ma​​in.py

from kivy.lang import Builder
from kivymd.app import MDApp
from kivymd.uix.chip import MDChip
from kivy.uix.screenmanager import ScreenManager, Screen


class MenuScreen(Screen):
    pass


class SettingsScreen(Screen):
    pass


sm = ScreenManager()
sm.add_widget(MenuScreen(name='menu'))
sm.add_widget(SettingsScreen(name='settings'))


class MyWidget(MDChip):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)


class MainApp(MDApp):
    def __init__(self, **kwargs):
        self.title = "My Material Application"
        super().__init__(**kwargs)

    def build(self):
        self.root = Builder.load_file('main.kv')
        return sm


if __name__ == "__main__":
    MainApp().run()

ma​​in.kv

<MenuScreen>:
    BoxLayout:
        Button:
            text: 'Goto settings'
            on_press:
                root.manager.transition.direction = 'left'
                root.manager.current = 'settings'
        Button:
            text: 'Quit'

<SettingsScreen>:
    BoxLayout:
        Button:
            text: 'My settings button'
        Button:
            text: 'Back to menu'
            on_press:
                root.manager.transition.direction = 'right'
                root.manager.current = 'menu'

我运行代码时得到的只是一个空白屏幕。

我做错了什么?

【问题讨论】:

    标签: python-3.x kivy kivy-language


    【解决方案1】:

    显然你必须在 def build(self) 中包含以下代码

    sm = ScreenManager()
    sm.add_widget(MenuScreen(name='menu'))
    sm.add_widget(SettingsScreen(name='settings'))
    

    所以最终的 main.py 文件将是

    from kivy.lang import Builder
    from kivymd.app import MDApp
    from kivymd.uix.chip import MDChip
    from kivy.uix.screenmanager import ScreenManager, Screen
    
    
    class MenuScreen(Screen):
        pass
    
    
    class SettingsScreen(Screen):
        pass
    
    
    class MyWidget(MDChip):
        def __init__(self, **kwargs):
            super().__init__(**kwargs)
    
    
    class MainApp(MDApp):
        def __init__(self, **kwargs):
            self.title = "My Material Application"
            super().__init__(**kwargs)
    
        def build(self):
            self.root = Builder.load_file('main.kv')
            sm = ScreenManager()
            sm.add_widget(MenuScreen(name='menu'))
            sm.add_widget(SettingsScreen(name='settings'))
            return sm
    
    
    if __name__ == "__main__":
        MainApp().run()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-19
      • 2020-03-18
      • 2012-06-14
      • 2014-11-15
      • 1970-01-01
      • 2012-07-02
      • 2011-09-07
      相关资源
      最近更新 更多