+-
python-kv语言的Kivy屏幕管理器参考
我试图制作一个主菜单,使我可以在单击按钮时切换屏幕,但是我不知道如何从该按钮引用管理器.

我有一个主菜单页面的设置(在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.

当我单击按钮更改屏幕时,我得到:

AttributeError: 'MainMenu' object has no attribute 'manager'

老实说,这并不令我惊讶.我认为我可以通过以下方式来解决此问题:在python代码中编写所有布局,并在BoxLayout或MainMenu小部件中添加对屏幕管理器的引用,但是我不知道如何在kv文件中执行此操作.

最佳答案
更好地理解问题后重新做答案:

您的MainWidget实例不知道screen_manager引用,它没有传递给它(并且在其规则根目录中引用的是MainWidget实例,而不是ScreenManager实例.

如果将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

点击查看更多相关文章

转载注明原文:python-kv语言的Kivy屏幕管理器参考 - 乐贴网