考虑以下代码:
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 秒的延迟?
谢谢!
答案:我仍然不知道为什么,但我知道解决方案:我必须在方法之外、类内部编写初始化(sm = ScreenManager,以便所有方法都可以访问同一个ScreenManager。否则,就会有多个 ScreenManager 是行不通的)