Heyy伙计们,
我正在尝试为窗口小部件设置动态ID。我这样做的原因是我可以使用ID找到这些小部件。不幸的是,当我尝试时,我不断获得KeyError
。我这样做的原因是,我可以创建一个新的小部件,拖动当前的小部件,但在其上有动态迭代ID,因此很容易跟踪。
python代码如下:
iterations = 0
def widget_iterations():
global iterations
iterations += 1
return iterations
class AddBlock(Widget):
id = "add" + str(widget_iterations())
def find_my_id(self):
return self.id
Kivy语言代码如下:
<AddBlock>:
size_hint_y: None
size: 110, 50
pos: self.pos
BoxLayout:
id: root.find_my_id()
我还尝试使用self.find_my_id()
,self.id
,root.id
,但仍然失败。
最后,我不确定如何解决这个问题。
任何帮助都将受到高度赞赏。
答案 0 :(得分:1)
您无法像这样动态设置ID,它不是属性,而是特殊令牌。你可能实际上并不需要,如果你提供一个你认为必要的例子,那么也许我们可以建议一个更好的方法。
编辑:这个评论太长了:
kv中id的要点是规则的根小部件获取它们的列表,通过它们可以访问规则的各个小部件。如果你用kv定义一个小部件,它在重要意义上就不是动态的(因为kv规则只是不会改变的初始定义)所以你不需要动态id。如果您以后修改了这些孩子,那么您根本不需要弄乱ID,因为您必须对小部件进行引用,因为您已经专门实例化并添加了它们。您可以通过其他方式存储该引用来访问它(如果您愿意,也可以手动修改ID dict,尽管您不必这样做。)
如果不清楚,您是否可以发布一个最小的工作示例,说明您尝试做什么以及您认为应该做什么,那么我可以解释一下吗?