在没有屏幕管理器类的情况下在 Python 中更改屏幕
Posted
技术标签:
【中文标题】在没有屏幕管理器类的情况下在 Python 中更改屏幕【英文标题】:Changing screens in Python without Screen Manager Class 【发布时间】:2019-04-02 20:16:22 【问题描述】:我在所有屏幕上都使用了手势,我不能使用屏幕管理器类来管理我的屏幕,至少我相信。我可以使用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'
【问题讨论】:
你有什么错误吗?或者预期的行为与您正在经历什么?我读到这里有点困惑。我知道您正在使用 Kivy,并且您的 .py 文件中缺少很多处理。但究竟是什么? @Torxed,感谢您尝试回答我的问题! Inclement 现场回答了我的问题。很抱歉我没有包含更多代码。正如我认为的那样,其中大部分都是多余的。 【参考方案1】:我一直在 .py 文件中尝试 Runner().ids.manager.current = 'some_screen' 但它不起作用。甚至没有抛出错误。画面完全没有变化。
它工作正常,只是没有按照你的想法去做。当您编写Runner()
时,您会得到一个Runner 类的新 实例,它有自己的子项,包括它自己的ScreenManager。这与您在 gui 中显示的无关。当您设置其current
属性时,ScreenManager 将尽职尽责地更改屏幕,只是您无法看到。
您真正想要的是更改您在 gui 中显示的小部件的 current
属性。执行此操作的最佳方法取决于您已省略的上下文(始终尝试提供完整的可运行示例,不清楚您的失败代码是什么样的)。但是,在这种情况下,Runner 实例是您的根小部件,可通过App.get_running_app().root
访问,因此您可以编写App.get_running_app().root.ids.manager.current = 'some_screen'
。同样,根据您的代码结构,可能有更简洁的方法,但这始终是一种选择。
【讨论】:
是的!这正是我想要完成的。太感谢了。该代码对我来说很有意义并且很整洁,因为我有时会使用类似的命令字符串。但我从来没有使用过get_running_app().root
,所以这对于添加到我的 Kivy 编码库中会非常有帮助!以上是关于在没有屏幕管理器类的情况下在 Python 中更改屏幕的主要内容,如果未能解决你的问题,请参考以下文章
如何在python脚本中默认情况下在第二个TFT屏幕上运行套接字服务器控制台,而不是在主TFT屏幕上?
如何在没有来自脚本的 Internet 连接的情况下在 Python 中转发地理编码?
执行堆栈操作以在没有集合api的情况下在java中推送字符串