在没有屏幕管理器 Class 的情况下更改 Python 中的屏幕
Changing screens in Python without Screen Manager Class
我在我的所有屏幕上都使用手势,我不能使用屏幕管理器 class 来管理我的屏幕,我相信是这样。我可以使用 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'
I've been trying Runner().ids.manager.current = 'some_screen' in the .py file but it doesn't work. There isn't even an error thrown. The screen doesn't change at all.
它工作正常,只是没有按照您的想法行事。当您编写 Runner()
时,您会得到 Runner class 的 new 实例,它有自己的 children,包括自己的 ScreenManager。这与您在 gui 中显示的那个无关。当您设置它的 current
属性 时,ScreenManager 会尽职尽责地改变屏幕,只是您无法看到它。
您真正想要的是更改您在 gui 中显示的小部件的 current
属性。执行此操作的最佳方法取决于您忽略的上下文(始终尝试提供完整的可运行示例,不清楚您的失败代码是什么样的)。但是,在这种情况下,Runner 实例是您的根小部件,可以使用 App.get_running_app().root
访问,因此您可以编写 App.get_running_app().root.ids.manager.current = 'some_screen'
。同样,根据您构建代码的方式,可能会有更简洁的方法,但这始终是一种选择。
我在我的所有屏幕上都使用手势,我不能使用屏幕管理器 class 来管理我的屏幕,我相信是这样。我可以使用 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'
I've been trying Runner().ids.manager.current = 'some_screen' in the .py file but it doesn't work. There isn't even an error thrown. The screen doesn't change at all.
它工作正常,只是没有按照您的想法行事。当您编写 Runner()
时,您会得到 Runner class 的 new 实例,它有自己的 children,包括自己的 ScreenManager。这与您在 gui 中显示的那个无关。当您设置它的 current
属性 时,ScreenManager 会尽职尽责地改变屏幕,只是您无法看到它。
您真正想要的是更改您在 gui 中显示的小部件的 current
属性。执行此操作的最佳方法取决于您忽略的上下文(始终尝试提供完整的可运行示例,不清楚您的失败代码是什么样的)。但是,在这种情况下,Runner 实例是您的根小部件,可以使用 App.get_running_app().root
访问,因此您可以编写 App.get_running_app().root.ids.manager.current = 'some_screen'
。同样,根据您构建代码的方式,可能会有更简洁的方法,但这始终是一种选择。