【问题标题】:How to set kivy widget id from Python code file如何从 Python 代码文件中设置 kivy 小部件 id
【发布时间】:2018-09-03 14:16:31
【问题描述】:

我需要帮助将 id 分配给从 python 函数创建的新 kivy 小部件

我试过了:

old = Label(id = 'old')

和:

old = Label()
old.id = 'old'

但它似乎不起作用,因为每当我尝试引用小部件时,它都会给我一个错误

【问题讨论】:

    标签: python widget kivy


    【解决方案1】:

    @ikolim 是正确的,但是有一种非常丑陋且不推荐的方式来完成您想要的:

    import weakref
    
    old = Label()
    self.ids.add_widget(old)
    self.ids['old'] = weakref.ref(old)
    

    这实际上将old id 添加到字典中(假设self 是正确的容器)。更好的方法是只保留对 old Label 的引用。

    【讨论】:

      【解决方案2】:

      您在 Python 代码中创建 id 的方式是正确的。

      但您不能使用self.ids.oldself.ids['old'] 引用它们,因为它们在self.ids 中不存在。 self.ids 字典类型属性仅包含所有带有在 kv 文件中定义的 id 标记的小部件。

      要引用 Python 代码中定义的 id,在此示例中使用 self.old

      Accessing Widgets defined inside Kv lang in your python code

      当您的 kv 文件被解析时,kivy 会收集所有标记为的小部件 id 并将它们放在此 self.ids 字典类型属性中。那 意味着您还可以遍历这些小部件并访问它们 字典样式。

      【讨论】:

        【解决方案3】:

        对于在 python 端动态制作的小部件,它们将不会在self.ids 中找到。相反,您必须遍历 self.children 才能找到分配给小部件的 id。例如:

        for child in self.children:
            if child.id == 'old':
                print child.text
                print 'Text found.'
                break
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-03-11
          • 1970-01-01
          • 2021-05-23
          • 1970-01-01
          • 1970-01-01
          • 2022-08-04
          • 1970-01-01
          相关资源
          最近更新 更多