Skip to main content
 首页 » 编程设计

python之为什么当我将正确的 .kv 代码放入外部 .kv 文件时,使用 screenmanager 的 .kv 代码不起作用

2025年05月04日16tintown

完美的功能代码:

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 Docs,应该可以将这段代码开头加载的字符串放入外部文件 myspecial.kv 中 一旦我这样做,我的屏幕就会空白,没有按钮,没有文字。为什么会这样,我怎样才能让它发挥作用?

请您参考如下方法:

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

您应该改为在 build 方法中创建您的小部件。 kv 文件在运行此方法之前加载,因此一切都应该正常运行。