我需要将ID分配给通过python函数创建的新kivy小部件的帮助
我已经尝试过:
supportFragmentManager.registerFragmentLifecycleCallbacks
和:
old = Label(id = 'old')
但是它似乎不起作用,因为每当我尝试引用这些小部件时,它都会给我一个错误
答案 0 :(得分:1)
您在Python代码中创建id
的方式是正确的。
但是您不能使用self.ids.old
或self.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