繁体   English   中英

如何使用bind动态更新Kivy Label的文本属性

[英]How to update the text attribute of Kivy Label dynamically using bind

我的问题简单明了。 我正在尝试使用 Kivy 中的bind函数动态更新小部件的属性。 是否可以? 如何?

概述

下面的代码片段是一个基本的 Kivy 应用程序,它向屏幕添加了一个带有一些文本的Label小部件。 有用! 但是,如果我想使用 bind 动态更改文本(正如您在注释行中看到的那样),我会收到以下错误消息:

AssertionError: 'Updated Text' is not callable

from kivy.app import App
from kivy.uix.label import Label


class TestApp(App):
    def build(self):
        my_label = Label(text='Initial Text')
        # my_label.bind(text='Updated Text')
        return my_label


if __name__ == '__main__':
    TestApp().run()

PS:我已经看过所有相关问题并在网上做了大量研究,包括使用可调用属性的回调(即on_presson_press等)。 但是,我找不到我的具体问题的答案。 我希望有人能指导我找到正确的答案,并且可能会谈谈 Kivy/Python 如何处理动态小部件修改,因为我对他们还是新手。

谢谢

您只需将 text 属性设置为您想要的任何内容。 例如,

my_label.text='new text'

但这仅适用于 build 方法,因为my_label对该方法是本地的。 在其他地方,您将需要引用Label实例。 由于在您的示例中, LabelTestApp显示的根,您可以使用更改文本

App.get_running_app().root.text='new text'

或者,如果您在TestApp的方法中执行此操作,则可能是

self.root.text='new text'

您还可以使用绑定,通常通过创建StringProperty并绑定到该属性。 绑定方法是将Labeltext属性设置为更改后的StringProperty 这一切都可以在Python中完成,但更经常(也更容易)在kv文件中完成:

ScreenManager:
    myText: 'Abba'
    Screen:
        name: 'the_screen'
        Label:
            text: root.myText

myText: 'Abba'行在ScreenManager创建一个StringProperty text: root.myText行将初始Label text为“Abba”,并为您安排上述绑定。 因此,无论何时更改ScreenManagermyText属性, Label text都会自动更新为更改后的StringProperty

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM