在没有屏幕管理器类的情况下在Python中更改屏幕

时间:2018-10-29 20:24:34

标签: python kivy screen

我在所有屏幕上都使用手势,因此无法使用屏幕管理器类来管理我的屏幕,所以我相信。我可以使用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'

1 个答案:

答案 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'。同样,根据您的代码结构,可能会有更巧妙的方法,但这始终是一个选择。

相关问题