为什么使用screenmanager的正确的.kv代码在我将其放入外部.kv文件时不起作用?

2024-10-03 11:16:37 发布

您现在位置:Python中文网/ 问答频道 /正文

完美功能代码:

from kivy.app import App
from kivy.lang import Builder

from kivy.uix.screenmanager import ScreenManager, Screen, NoTransition

Builder.load_string("""
#:kivy 1.8

<StartScreen>:
    BoxLayout:
        Label:
            text: "Press Button to"
        Button:
            text: "Start Server"
            on_press:
                root.start_server()
                root.manager.current='stopscreen'

<StopScreen>:
    BoxLayout:
        Label:
            text: "Press Button to"
        Button:
            text: "Stop Server"
            on_press:
                root.stop_server()
                root.manager.current='startscreen'
""")

class StartScreen(Screen): 
    def start_server(self):
        print('Server started.')


class StopScreen(Screen):  
    def stop_server(self):
        print('Server stopped.')


sm = ScreenManager(transition=NoTransition())
sm.add_widget(StartScreen(name='startscreen'))
sm.add_widget(StopScreen(name='stopscreen'))


class MySpecialApp(App):

    def build(self):
        return sm


MySpecialApp().run()

现在,根据Kivy文档,应该可以将代码开头加载的字符串放入外部文件中,我的特殊电压 一旦我这么做,我的屏幕就空白了,没有按钮,没有文本。为什么是这样,我怎么才能让它发挥作用?在


Tags: textfromimportselfserverdefbuttonroot
2条回答

当应用程序启动时,myspecial.kv文件会被加载,但在此之前您需要初始化小部件。在运行sm = ScreenManager(transition=NoTransition())时,kv尚未加载,因此屏幕管理器没有预期的样式。在

您应该在build方法中创建小部件。kv文件是在这个方法运行之前加载的,所以一切正常。在

主.py

from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen


class StartScreen(Screen): 
    def start_server(self):
        print('Server started.')


class StopScreen(Screen):  
    def stop_server(self):
        print('Server stopped.')


class RootScreen(ScreenManager):
    pass


class MySpecialApp(App):
    def build(self):
        return RootScreen()


if __name__ == '__main__':
    MySpecialApp().run()

我的特殊电压

^{pr2}$

相关问题 更多 >