假设我有3个类:一个“woking类”,其中有东西发生,一个label类和一个包含它们的类。 例如,label类可以是一个状态栏,显示工作类上正在进行的某些事情的状态。我希望我能找到一种方法让标签自我更新要显示的值,因为这个值是工人阶级在后者内部被改变的值。在
这里有一个示例代码
Builder.load_string('''
<CustomLabel>
text: 'Value is {}'.format(root.value)
<WorkingClass>:
orientation: 'vertical'
Button:
text: 'Update'
on_release: root.update()
<MainLayout>
orientation: 'vertical'
''')
class CustomLabel(Label):
value = NumericProperty()
class WorkingClass(BoxLayout):
def __init__(self, *args, **kwargs):
super(WorkingClass, self).__init__(*args, **kwargs)
self.a = 5
def update(self):
self.a += 1
print(self.a)
class MainLayout(BoxLayout):
def __init__(self, *args, **kwargs):
super(MainLayout, self).__init__(*args, **kwargs)
self.workingClass = WorkingClass()
self.customLabel = CustomLabel(value=self.workingClass.a)
self.add_widget(self.customLabel)
self.add_widget(self.workingClass)
class MyApp(App):
def build(self):
return MainLayout()
if __name__ == "__main__":
MyApp().run()
有没有一种方法可以用属性或者其他什么来做呢?因为我不想每次更改值时都需要手动更新(sommehow)标签。为了达到这个目的?在
您正在更新
WorkingClass
上的属性,但这不会更新CustomLabel
上的值,因为您是直接赋值而不是bind
。但是是的,您可以使用Property
s使所有东西自动工作。在在
WorkingClass
中:这将使
a
变成可以绑定到的Property
。在然后在
^{pr2}$MainLayout
的构造函数中:最后一行是:“当
self.workingClass
上的属性a
的值改变时,将self.customLabel
的value
属性设置为相同的值”或者,您可以将
Property
添加到上面的WorkingClass
中,然后去掉MainLayout
的构造函数,使用kv代替:相关问题 更多 >
编程相关推荐