Python、Kivy:为什么第二个 ScreenManager() 不起作用?

问题描述 投票:0回答:1

考虑以下代码:

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.clock import Clock

class MyApp(App):                     
    def build(self):                   
        sm = ScreenManager()
        sm.add_widget(EntranceScreen(name="Hi"))
        sm.add_widget(QuestionScreen(name="Question"))
        Clock.schedule_once( MyApp.ClockArg, 5)
        print("done with Function")                #Prints, it works
        return sm
    
    def ClockArg(dt):
        print("5 secs passed")                     #Prints, it works
        sm = ScreenManager()
        sm.add_widget(QuestionScreen(name="Question"))
        ScreenManager().current = "Question"      

class EntranceScreen(Screen):
    pass

class QuestionScreen(Screen):
    pass

#The rest of code is insignificant

我面临的问题是: 5 秒后,ClockArg 被执行,它打印“5 secs gone”。但画面不会改变。这意味着第二个 ScreenManager() 没有执行任何操作。为什么?如何更改代码,使所有内容都将在 build() 方法中执行,但从第一个屏幕到第二个屏幕也有 5 秒的延迟?

谢谢!

python kivy
1个回答
0
投票

答案:我仍然不知道为什么,但我知道解决方案:我必须在方法之外、类内部编写初始化(sm = ScreenManager,以便所有方法都可以访问同一个ScreenManager。否则,就会有多个 ScreenManager 是行不通的)

© www.soinside.com 2019 - 2024. All rights reserved.