【发布时间】: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_press、on_press 等)。但是,我找不到我的具体问题的答案。
我希望有人能指导我找到正确的答案,也许会谈谈 Kivy/Python 如何处理动态小部件修改,因为我对他们还是新手。
谢谢
【问题讨论】:
-
bind语句将event绑定到method。你想绑定什么event,当event发生时你想调用什么method? -
@JohnAnderson 哦!在这种情况下没有事件,我猜。我只想更新
text属性。 -
然后您只需将
text属性设置为您想要的任何值。例如,my_label.text='new text',但这仅适用于builld方法,因为my_label是该方法的本地方法。在其他地方,您需要引用Label实例。因为在您的示例中,Label是TestApp显示的root,您可以使用App.get_running_app().root.text='new text'更改文本,或者如果您使用TestApp的方法进行更改,则可能是@987654344 @. -
多么幼稚的问题,多么好的答案!泰@JohnAnderson。您能否将其发布为答案,以便我标记它。
标签: python dynamic label kivy kivy-language