python - 如何使用 kivy 从 def 中的其他类访问变量?

标签 python kivy

问题

我正在使用 kivy 和 ScreenManager 做一个 GUI 并使用许多屏幕。

我有一个类 Screen1,其中有一个变量,名为 num,其值为 1。

Screen1 GUI 有一个按钮,当我按下按钮时,它调用 def calledwithbuttonnum 变量更改为 self.num = 2 ,然后将屏幕更改为屏幕 2。

Screen2 类有一个变量 var,其值为 Screen1().num

Screen2 GUI 有一个标签,文本是 str(var)

预期的结果是 Screen2 GUI 标签 text = '2'

但真正的结果是屏幕 2 GUI 标签文本 = '1'

如何根据 num 变量将屏幕 2 GUI 标签文本更改为 '2'

.py代码

from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen


class Manager(ScreenManager):
    pass

class Screen1(Screen):

    num = 1

    def calledwithbutton(self):

        self.num = 2
        self.parent.current = 'Screen 2'

class Screen2(Screen):

    var = Screen1.num

class RootApp(App):

    def build(self):
        return Manager()

RootApp().run()

.kv代码

<Manager>:

    Screen1:
        name: 'Screen 1'

    Screen2:
        name: 'Screen 2'

<Screen1>:

    Button:
        text: 'This is a button'
        on_press: root.calledwithbutton()

<Screen2>:

    Label:
        text: str(root.var)

最佳答案

对于这种类型的任务,您不必使用静态变量,因为它不会通知更改,在您的情况下,var 仅在创建 Screen2 对象时采用 num 的值为 1,因此它永远不会更改到 2.

在 kivy 中,这些情况的解决方案是使用 the properties ,在本例中为 NumericProperty,然后我们在属性之间进行绑定(bind)。

*.py

from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import NumericProperty

class Manager(ScreenManager):
    pass

class Screen1(Screen):
    num = NumericProperty(1)

    def calledwithbutton(self):
        self.num = 2
        self.manager.current = 'Screen 2'

class Screen2(Screen):
    var = NumericProperty(0)

class RootApp(App):
    def build(self):
        return Manager()

if __name__ == '__main__':
    RootApp().run()

*.kv

<Manager>:
    Screen1:
        id: screen1
        name: 'Screen 1'
    Screen2:
        id: screen2
        name: 'Screen 2'
        var: screen1.num # binding

<Screen1>:
    Button:
        text: 'This is a button'
        on_press: root.calledwithbutton()

<Screen2>:
    Label:
        text: str(root.var)

关于python - 如何使用 kivy 从 def 中的其他类访问变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54046638/

相关文章:

python - python中的子进程远程命令执行

python - 不了解python的内部功能

python - kivy 中绑定(bind)按钮的 On_Release 事件不起作用 - 运行 on_touch_down

python - 如何在 Windows 上为 PyCharm 配置 Python Kivy?

kivy - 如何在 Kivy 中使用时间 sleep

python - 如何处理子进程异常终止?

python - 我可以使用 Sphinx automodule 但在签名中删除模块名称吗?

python - 使用欧元符号定界符将 pandas 写入 csv 时出错

python - exe 编译的 Kivy 程序访问图像的问题

python - 更新解析用户信息以跟踪 kivy 应用程序中的玩家分数