【发布时间】:2018-09-03 14:16:31
【问题描述】:
我需要帮助将 id 分配给从 python 函数创建的新 kivy 小部件
我试过了:
old = Label(id = 'old')
和:
old = Label()
old.id = 'old'
但它似乎不起作用,因为每当我尝试引用小部件时,它都会给我一个错误
【问题讨论】:
我需要帮助将 id 分配给从 python 函数创建的新 kivy 小部件
我试过了:
old = Label(id = 'old')
和:
old = Label()
old.id = 'old'
但它似乎不起作用,因为每当我尝试引用小部件时,它都会给我一个错误
【问题讨论】:
@ikolim 是正确的,但是有一种非常丑陋且不推荐的方式来完成您想要的:
import weakref
old = Label()
self.ids.add_widget(old)
self.ids['old'] = weakref.ref(old)
这实际上将old id 添加到字典中(假设self 是正确的容器)。更好的方法是只保留对 old Label 的引用。
【讨论】:
您在 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字典类型属性中。那 意味着您还可以遍历这些小部件并访问它们 字典样式。
【讨论】:
对于在 python 端动态制作的小部件,它们将不会在self.ids 中找到。相反,您必须遍历 self.children 才能找到分配给小部件的 id。例如:
for child in self.children:
if child.id == 'old':
print child.text
print 'Text found.'
break
【讨论】: