如何在Kivy中将一个属性绑定到另一个属性?

3
我希望将一个部件的属性绑定到其子部件的属性上。这样,当根部件的属性更改时,该更改也会传播到子部件的属性中。
我尝试过以下方式:
self._Child._MyProperty = self._MyProperty

这个有时候有效,但有时候却无效。我无法找出它何时有效或为什么在哪些条件下它无效。

在所有情况下,我也将方法绑定到了根widget上:

self.bind(_MyPropert = self._MyPropertyChange)

这个方法在所有情况下都会被调用,但有时候更改并不会传递到子属性。

即使感觉非常自然,这也无法正常工作:

self.bind(_MyProperty = self._Child._MyProperty)

但是在Kivy中,我可以这样做:
<RootWidget>
    <ChildWidget>
        _MyProperty: self.parent._MyProperty

问题是我想用Python来实现,而不是Kivy。
1个回答

4

要将一个属性绑定到另一个属性,您应该使用 setter 事件:

self.bind(_MyProperty=self._Child.setter('_MyProperty'))

由于某种原因,这对我没有效果。这里是到目前为止的代码。但我不明白在makeLabel()中哪里出错了。 - wimworks
1
@FergusWyrm 它是有效的,只是它没有做任何事情,因为您没有更改绑定到属性的值。更改您的函数如此所示。您将看到“Lorem ipsum”出现了。 - Mikhail Gerasimov
是的,那正是它的作用。我得想办法在不实际更改值的情况下手动触发属性事件。 - wimworks
1
@FergusWyrm,只是为了明确:self.property('c_description').dispatch(self) - 是一种在不改变值的情况下触发属性事件的方法。 - Mikhail Gerasimov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接