gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 06:48:42 26 4
gpt4 key购买 nike

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

概述:

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

断言错误:“更新的文本”不可调用

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 如何处理动态小部件修改,因为我对它们还是新手。

谢谢

最佳答案

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

my_label.text='new text'

但这仅适用于构建方法,因为 my_label 是该方法的本地变量。在其他地方,您需要引用 Label 实例。由于在您的示例中,LabelTestApp 显示的根,因此您可以使用

更改文本
App.get_running_app().root.text='new text'

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

self.root.text='新文本'

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

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

myText: 'Abba' 行在 ScreenManager 中创建一个 StringPropertytext: root.myText 行将初始 Label text 设置为“Abba”,并为您安排上述绑定(bind)。因此,每当 ScreenManagermyText 属性发生更改时,Label text 都会自动更新为更改后的 字符串属性

关于python - 如何使用bind动态更新Kivy Label的文本属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59118306/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com