kv 语言中的 Kivy 屏幕管理器参考

2023-06-07Python开发问题
17

本文介绍了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 代码中编写所有布局并在 BoxLayoutMainMenu 小部件中添加对屏幕管理器的引用来解决这个问题,但我不知道如何在 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 屏幕管理器参考的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

在xarray中按单个维度的多个坐标分组
groupby multiple coords along a single dimension in xarray(在xarray中按单个维度的多个坐标分组)...
2024-08-22 Python开发问题
15

Pandas中的GROUP BY AND SUM不丢失列
Group by and Sum in Pandas without losing columns(Pandas中的GROUP BY AND SUM不丢失列)...
2024-08-22 Python开发问题
17

pandas 有从特定日期开始的按月分组的方式吗?
Is there a way of group by month in Pandas starting at specific day number?( pandas 有从特定日期开始的按月分组的方式吗?)...
2024-08-22 Python开发问题
10

GROUP BY+新列+基于条件的前一行抓取值
Group by + New Column + Grab value former row based on conditionals(GROUP BY+新列+基于条件的前一行抓取值)...
2024-08-22 Python开发问题
18

PANDA中的Groupby算法和插值算法
Groupby and interpolate in Pandas(PANDA中的Groupby算法和插值算法)...
2024-08-22 Python开发问题
11

PANAS-基于列对行进行分组,并将NaN替换为非空值
Pandas - Group Rows based on a column and replace NaN with non-null values(PANAS-基于列对行进行分组,并将NaN替换为非空值)...
2024-08-22 Python开发问题
10