我在所有屏幕上都使用手势,因此无法使用屏幕管理器类来管理我的屏幕,所以我相信。我可以使用manger.current = 'some_screeen'
浏览.kv文件,但不能在.py文件中浏览。
我一直在尝试在.py文件中使用Runner().ids.manager.current = 'some_screen'
,但是它不起作用。甚至没有引发任何错误。屏幕完全没有变化。
基本代码(为简洁起见):
class Runner(gesture.GestureBox):
pass
MyApp(App):
def build(self):
return Runner()
然后在KV文件中,创建屏幕管理器。
<Runner>:
ScreenManager:
id: manager
Screen:
name: 'main_screen'
Button:
on_press:
manager.current = 'screen1'
Screen:
name: 'screen1'
Button:
on_press:
manager.current = 'home_screen'
答案 0 :(得分:1)
我一直在.py文件中尝试Runner()。ids.manager.current ='some_screen',但是它不起作用。甚至没有引发任何错误。屏幕完全没有变化。
它工作正常,只是没有做您认为的事情。当您编写Runner()
时,您将获得Runner类的 new 实例,它带有自己的子级,包括自己的ScreenManager。这与您在gui中显示的内容无关。当您设置其current
属性时,ScreenManager会忠实地更改屏幕,只是您无法看到它。
您真正想要的是更改在gui中显示的小部件的current
属性。做到这一点的最佳方法取决于您已省略的上下文(总是尝试提供一个完整的可运行示例,尚不清楚失败的代码是什么样子)。但是,在这种情况下,Runner实例是您的根窗口小部件,可通过App.get_running_app().root
访问,因此您可以编写App.get_running_app().root.ids.manager.current = 'some_screen'
。同样,根据您的代码结构,可能会有更巧妙的方法,但这始终是一个选择。