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

问题描述 投票:1回答:1

我的问题很简单明了。我正在尝试使用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如何处理动态小部件修改,所以请他们谈谈。

谢谢

python dynamic label kivy kivy-language
1个回答
1
投票

您只需将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并绑定到该属性来使用。绑定方法将是将textLabel属性设置为更改的StringProperty的代码。所有这些都可以在Python中完成,但是更经常(更容易)在kv文件中完成:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.