[英]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_press
、 on_press
等)。 但是,我找不到我的具体问题的答案。 我希望有人能指导我找到正确的答案,并且可能会谈谈 Kivy/Python 如何处理动态小部件修改,因为我对他们还是新手。
谢谢
您只需将 text 属性设置为您想要的任何内容。 例如,
my_label.text='new text'
但这仅适用于 build 方法,因为my_label
对该方法是本地的。 在其他地方,您将需要引用Label
实例。 由于在您的示例中, Label
是TestApp
显示的根,您可以使用更改文本
App.get_running_app().root.text='new text'
或者,如果您在TestApp
的方法中执行此操作,则可能是
self.root.text='new text'
您还可以使用绑定,通常通过创建StringProperty
并绑定到该属性。 绑定方法是将Label
的text
属性设置为更改后的StringProperty
。 这一切都可以在Python
中完成,但更经常(也更容易)在kv
文件中完成:
ScreenManager:
myText: 'Abba'
Screen:
name: 'the_screen'
Label:
text: root.myText
myText: 'Abba'
行在ScreenManager
创建一个StringProperty
。 text: root.myText
行将初始Label
text
为“Abba”,并为您安排上述绑定。 因此,无论何时更改ScreenManager
的myText
属性, Label
text
都会自动更新为更改后的StringProperty
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.