我正在尝试制作一个主菜单,让我在单击按钮时切换屏幕,但我不知道如何从按钮引用管理器。
我有一个主菜单页面的设置(在 kv 文件中):
<MainMenu>: #AnchorLayout
BoxLayout:
Button:
text: "button 1"
Button:
text: "change screen"
on_release: root.manager.current = "OtherPage"
<MainWidget>:
screen_manger: screen_manager
ScreenManger:
id: screen_manger
Screen:
name: "MainMenu"
MainMenu
Screen:
name: "OtherPage"
OtherPage #this is defined in the kv file, just lazy to type it.
当我点击按钮时Change Screen
, i get:
AttributeError: 'MainMenu' object has no attribute 'manager'
老实说,这并不让我感到惊讶。我想我可以通过用 python 代码编写所有布局并在中添加对屏幕管理器的引用来解决这个问题BoxLayout
or MainMenu
小部件,但我不知道如何在 kv 文件中执行此操作。
更好地理解问题后重新做答案:
您的 MainWidget 实例不知道 screen_manager 引用,它不会传递给它(并且在其规则中root
引用 MainWidget 实例,而不是ScreenManager
one.
如果你把manager: screen_manager
根据声明MainWidget
实例(第 15 行),然后添加一个manager
将 ObjectProperty 添加到 MainWidget 的 python 声明中,然后您的绑定就会起作用。
python:
class MainWidget(Widget):
manager = ObjectProperty(None)
kv:
<MainWidget>:
screen_manger: screen_manager
ScreenManger:
id: screen_manger
Screen:
name: "MainMenu"
MainMenu:
manager: screen_manager
Screen:
name: "OtherPage"
那么它应该按照你想要的方式工作。
编辑:另外,qua-non 的这个 wiki 条目可能会有所帮助https://github.com/kivy/kivy/wiki/Linking-ScreenManager-to-a- Different-Widget https://github.com/kivy/kivy/wiki/Linking-ScreenManager-to-a-different-Widget
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)