Python创建的标签-按ID更新文本

时间:2019-08-13 00:55:03

标签: python kivy kivy-language

我有一个屏幕,该屏幕在从基于python的代码输入时生成BoxLayout和Label。 BoxLayout将基于kv文件中预定义的ID插入BoxLayout中。

我有一个每秒被调用的函数,我想更新生成的标签。但是,这样做时,找不到ID。

尝试根据ID更新标签失败。

self.ids.generatedLabel = "Updated text"

根据Kivy文档和其他论坛,我了解到ID是在屏幕构建时生成的,因此不会显示任何动态添加的内容。但是,另一篇文章似乎指向能够将创建的窗口小部件存储为Python中的引用。怎么做?还是有一种方法可以在已经加载后简单地“重新加载” Screen的小部件字典?

参考帖子

'因为您是用代码创建它们的,所以您可以自己保存对它们的引用(使用.kv很难做到)。 Referencing id of dynamically created widget in Kivy

Python代码

    def update_gui_labels(self, *args): 
        self.ids.generatedLabel = "Updated text"


    def on_enter(self, *args):

        if label:
            print("Label found start generating")
            self.build_labels(label)
        else:
            print("No labels")

        Clock.schedule_interval(self.update_gui_labels, 1)


    def build_labels(self, label):

        labelID = StringProperty("generatedLabel")

        print("Creating Label: " + label.name)
        print("Label Value: " + label.value)
        print("Update Label ID: " + labelID)

        labelHolder = BoxLayout(
            orientation='vertical',
            size_hint_y=None
            )
            labelHolder.bind(minimum_height=labelHolder.setter('height'))

        labelHeader = Label(
            size_hint_y= None,
            height='60sp',
            text=label.name
        )

        updLabel = Label(
            id= generatedLabel,
            size_hint_y= None,
            height='60sp',
            text=label.value
        )

        labelHolder.add_widget(labelHeader)
        labelHolder.add_widget(updLabel)

        self.ids.screen_Labels.add_widget(labelHolder)

Kivy代码

<ScreenExample>:
    BoxLayout:
        id: screen_Labels
        orientation: 'vertical'
        spacing: 5

1 个答案:

答案 0 :(得分:0)

您没有尝试设置ID generatedLabel,因此这就是您尝试访问ID失败的原因。

  

但是,另一篇文章似乎指向能够将创建的窗口小部件存储为Python中的引用。怎么做?

这只是指普通的Python变量操作。当您编写a = []时,a是对该列表的引用。如果您写b = a,则b也是对该列表的引用。如果您写self.the_list = a,则表示已在当前对象中存储了对该列表的引用,以后可以访问self.the_list以再次使用它。