擅长:python、mysql、java
<blockquote>
<p>However, none of the labels are updating. Can someone clarify how to do this?</p>
</blockquote>
<p>您引用的属性必须是Kivy属性,但是您引用的<code>a</code>、<code>b</code>和<code>c</code>都只是python属性,因此Kivy无法绑定到它们的更改。</p>
<p>要使用属性,您需要对象从<code>EventDispatcher</code>继承(Kivy小部件会自动执行此操作,这就是它们的属性工作的原因)。</p>
<pre><code>from kivy.event import EventDispatcher
class DataModel(EventDispatcher):
a = StringProperty('')
b = StringProperty('')
c = StringProperty('')
def __init__(self, *args, **kwargs):
super(DataModel, self).__init__(*args, **kwargs)
self.a = 'This is a'
self.b ='This is b'
self.bind(a=self.set_c)
self.bind(b=self.set_c)
def set_c(self, instance, value):
self.c = self.a + ' and ' + self.b
</code></pre>
<p>请注意,这不是获得您想要的c行为的唯一方法(甚至必然是最好的方法)。您可以用kv语言创建绑定(我通常会这样做),或者您可以查看Kivy的AliasProperty,以获得更像原始定义的内容。</p>
<p>当然,您也可以在声明属性时设置a和b的值。</p>