提问人:Simon Van den Bossche 提问时间:9/1/2020 最后编辑:Simon Van den Bossche 更新时间:9/2/2020 访问量:303
Kivy 属性未更新
kivy property not updating
问:
所以我正在开发一个基于 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,如果您将属性添加到“文本”中,它将自动更新该属性。
我做错了什么?
答:
0赞
amras
9/1/2020
#1
这是因为不是根据按钮的状态设置的。请更改如下所示的功能,它应该按预期工作:test0
on_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 将随之更改,只是多做一点工作。
上一个:Kivy 使用多个类
评论