Kivy Screen经理用kv语言参考

时间:2013-03-28 08:26:27

标签: python user-interface 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.

当我点击按钮Change Screen时,我得到:

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

一点都不诚实。我想我可以通过在python代码中编写所有布局并在BoxLayoutMainMenu窗口小部件中添加对屏幕管理器的引用来解决这个问题,但我不知道如何在kv中执行此操作文件。

1 个答案:

答案 0 :(得分:3)

在更好地理解问题后重新做出答案:

您的MainWidget实例不知道screen_manager引用,它不会传递给它(并且在其规则root中引用MainWidget实例,而不是ScreenManager引用。

如果你将manager: screen_manager置于MainWidget实例的声明(第15行)之下,并且你将manager ObjectProperty添加到MainWidget的python声明中,那么你的绑定将起作用。< / p>

蟒:

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"

然后它应该按你的意愿工作。

编辑:此外,这个由qui-non创建的wiki条目可能会有所帮助https://github.com/kivy/kivy/wiki/Linking-ScreenManager-to-a-different-Widget