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

Posted

技术标签:

【中文标题】如何使用绑定动态更新 Kivy Label 的文本属性【英文标题】:How to update the text attribute of Kivy Label dynamically using bind 【发布时间】:2020-03-25 20:22:48 【问题描述】:

我的问题很简单直接。我正在尝试使用 Kivy 中的bind 函数动态更新小部件的属性。 有可能吗?以及如何?

概述

下面的 sn-p 是一个基本的 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 如何处理动态小部件修改,因为我对他们还是新手。

谢谢

【问题讨论】:

bind 语句将event 绑定到method。你想绑定什么event,当event发生时你想调用什么method @JohnAnderson 哦!在这种情况下没有事件,我猜。我只想更新text 属性。 然后您只需将text 属性设置为您想要的任何值。例如,my_label.text='new text',但这仅适用于builld 方法,因为my_label 是该方法的本地方法。在其他地方,您需要引用Label 实例。因为在您的示例中,LabelTestApp 显示的root,您可以使用App.get_running_app().root.text='new text' 更改文本,或者如果您使用TestApp 的方法进行更改,则可能是@987654344 @. 多么幼稚的问题,多么好的答案!泰@JohnAnderson。您能否将其发布为答案,以便我标记它。 【参考方案1】:

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

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 中创建了一个StringPropertytext: root.myText 行将初始的Label text 设置为“Abba”,并为您安排上述绑定。因此,每当ScreenManagermyText 属性发生更改时,Label text 将自动更新为更改后的StringProperty

【讨论】:

以上是关于如何使用绑定动态更新 Kivy Label 的文本属性的主要内容,如果未能解决你的问题,请参考以下文章

Kivy:单击按钮时如何更新标签

Kivy Label.text 属性不会在 UI 上更新

Kivy 标签文本未更新 - 仅在方法的最后一次更改时更新

在 Kivy 上双击时如何回调和打印 MDLabel 的文本?

在 Kivy for Python 中按下按钮时更新标签的文本

在 Kivy for Python 中按下按钮时更新标签的文本