Kivy Screen manager reference in kv language(kv 语言中的 Kivy 屏幕管理器参考)
问题描述
我正在尝试制作一个主菜单,让我在单击按钮时切换屏幕,但我不知道如何从按钮中引用管理器.
I'm trying to make a main menu that lets me switch Screens when I click a button, but I can't figure out how to reference the manager from the button.
我有一个主菜单页面的设置(在 kv 文件中):
I have a setup for a main menu page (in kv file):
<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 时,我得到:
When I click on the Button Change Screen, i get:
AttributeError: 'MainMenu' object has no attribute 'manager'
老实说,这并不让我感到惊讶.我想我可以通过在 python 代码中编写所有布局并在 BoxLayout 或 MainMenu 小部件中添加对屏幕管理器的引用来解决这个问题,但我不知道如何在 kv 文件中执行此操作.
which, in all honesty doesn't supprise me. I figure I can work around this by writing all the layout in python code and adding a reference to the screen manager in the BoxLayout or MainMenu widgets, but I have no idea how to do this in the kv file.
推荐答案
更好理解问题后重新做答案:
Re-doing the answer after understanding the issue better:
您的 MainWidget 实例不知道 screen_manager 引用,它没有传递给它(并且在其规则中 root 引用 MainWidget 实例,而不是 ScreenManager 一个.
Your MainWidget instance doesn't know about the screen_manager reference, it's not passed to it (and in its rule root refer to the MainWidget instance, not the ScreenManager one.
如果您将 manager: screen_manager 放在 MainWidget 实例的声明下(第 15 行),然后将 manager ObjectProperty 添加到 pythonMainWidget 的声明,那么您的绑定将起作用.
If you put manager: screen_manager under the declaration of MainWidget instance (line 15), and you add a manager ObjectProperty to the python declaration of MainWidget, then your binding will work.
蟒蛇:
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"
那么它应该可以按您的意愿工作.
then it should work as you want it.
另外,qua-non 的这个 wiki 条目可能会有所帮助 https://github.com/kivy/kivy/wiki/Linking-ScreenManager-to-a-different-Widget
edit: also, this wiki entry by qua-non could be helpful https://github.com/kivy/kivy/wiki/Linking-ScreenManager-to-a-different-Widget
这篇关于kv 语言中的 Kivy 屏幕管理器参考的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:kv 语言中的 Kivy 屏幕管理器参考
基础教程推荐
- 将 x 轴刻度更改为自定义字符串 2022-01-01
- 尝试制作WhatsApp机器人 2022-01-01
- Discord.py 缺少必需的参数 2022-01-01
- pyserial - 可以从线程 a 写入串行端口,是否阻塞从线程 b 读取? 2022-01-01
- 由Python将MP3转换为MIDI(类型错误:无法加载插件:mtg-Melodia:Melodia) 2022-01-01
- 与常规 dict 相比,Python manager.dict() 非常慢 2022-01-01
- 在 Celery 工作人员中捕获 Heroku SIGTERM 以优雅地关 2022-01-01
- 使用生成器和迭代器时 Python 多循环失败 2022-01-01
- 用 Python 编写 Fortran 无格式文件 2022-01-01
- numpy float:比算术运算中内置的慢 10 倍? 2022-01-01
