【问题标题】:Kivy Screen manager reference in kv languagekv 语言中的 Kivy 屏幕管理器参考
【发布时间】:2013-03-28 08:26:27
【问题描述】:

我正在尝试制作一个主菜单,让我在单击按钮时切换屏幕,但我不知道如何从按钮中引用管理器。

我有一个主菜单页面的设置(在 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 文件中执行此操作。

【问题讨论】:

    标签: python user-interface kivy


    【解决方案1】:

    更好地理解问题后重新回答:

    您的 MainWidget 实例不知道 screen_manager 引用,它没有传递给它(在其规则中 root 指的是 MainWidget 实例,而不是 ScreenManager 之一。

    如果您将manager: screen_manager 放在MainWidget 实例的声明下(第15 行),并将manager ObjectProperty 添加到MainWidget 的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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多