Kivy:自我更新标签tex

2024-09-19 23:37:56 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有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)标签。为了达到这个目的?在


Tags: 方法textselfinitvaluedefargs标签
1条回答
网友
1楼 · 发布于 2024-09-19 23:37:56

您正在更新WorkingClass上的属性,但这不会更新CustomLabel上的值,因为您是直接赋值而不是bind。但是是的,您可以使用Propertys使所有东西自动工作。在

WorkingClass中:

class WorkingClass(BoxLayout):
    a = NumericProperty()

    def __init__(self, **kwargs): ...

这将使a变成可以绑定到的Property。在

然后在MainLayout的构造函数中:

^{pr2}$

最后一行是:“当self.workingClass上的属性a的值改变时,将self.customLabelvalue属性设置为相同的值”

或者,您可以将Property添加到上面的WorkingClass中,然后去掉MainLayout的构造函数,使用kv代替:

<MainLayout>:
    orientation: 'vertical'

    WorkingClass:
        id: working_class

    CustomLabel:
        value: working_class.a  # assigning one property to another in kv automatically binds

相关问题 更多 >