如何从Python代码文件设置Kivy小部件ID

时间:2018-09-03 14:16:31

标签: python widget kivy

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

我已经尝试过:

supportFragmentManager.registerFragmentLifecycleCallbacks

和:

old = Label(id = 'old')

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

3 个答案:

答案 0 :(得分:1)

您在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字典类型属性中。那   意味着您还可以遍历这些小部件并访问它们   字典样式。

答案 1 :(得分:1)

@ikolim是正确的,但是有一种非常丑陋且不建议使用的方法来完成您想要的操作:

import weakref

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

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

答案 2 :(得分:1)

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

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