Kivy 属性未更新

kivy property not updating

提问人:Simon Van den Bossche 提问时间:9/1/2020 最后编辑:Simon Van den Bossche 更新时间:9/2/2020 访问量:303

问:

所以我正在开发一个基于 kivy 的 GUI。

我对切换按钮与状态(“down”和“normal”)而不是布尔值一起工作这一事实感到非常恼火,所以我创建了自己的切换开关:

class Toggle(ToggleButton):
    pressed = BooleanProperty(False)

    def on_state(self, _, state):
        self.pressed = state == "down"

    def on_pressed(self, _, pressed):
        self.state = "down" if pressed else "normal"

在我的 kv 文件中,我有一个测试按钮:

Main:
    Toggle:
        size_hint: None, 1
        width: 60
        pressed: root.test0
        on_release: root.test()
    Toggle:
        size_hint: None, 1
        width: 60
        pressed: root.test1
        on_release: root.test()

使用此 python 代码:

class Main(BoxLayout):
    test0 = BooleanProperty(False)
    test1 = BooleanProperty(False)

    def test(self):
        print("test", self.test0, self.test1)

如果我更改 test0 的值,则切换按钮状态 但是如果我单击按钮 test0 不会更新。

这也需要适用于任何其他变量,如 test1。 使用 kivy Spinner,如果您将属性添加到“文本”中,它将自动更新该属性。

我做错了什么?

python-3.x kivy kivy 语言

评论


答:

0赞 amras 9/1/2020 #1

这是因为不是根据按钮的状态设置的。请更改如下所示的功能,它应该按预期工作:test0on_pressed

    def on_pressed(self, _, pressed):
        if pressed:
            self.state = "down"
            self.parent.test0 = True
        else:
            self.state = "normal"
            self.parent.test0 = False

评论

0赞 Simon Van den Bossche 9/2/2020
这不是我问的安静,我编辑了问题。
0赞 Simon Van den Bossche 9/2/2020 #2

所以我认为我试图做的事情并不存在。我所说的微调器自动更新属性是不正确的。

我先睹为快地看了一眼 kivy 复选框小部件,并用它来更新我的代码:

切换:

class Toggle(ToggleButton):
    def get_active(self):
        return self.state == "down"

    def set_active(self, value):
        self.state = "down" if value else "normal"

    active = AliasProperty(get_active, set_active, bind=("state",))

和 kv

Toggle:
    size_hint: None, 1
    width: 60
    active: root.test0
    on_active: root.test0 = self.active
    on_active: root.test()

现在,如果活动更改,test0 将随之更改,只是多做一点工作。