通过Python在Kivy中设置动态ID

时间:2014-12-13 22:29:32

标签: python python-2.7 kivy

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.idroot.id,但仍然失败。

最后,我不确定如何解决这个问题。

任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

您无法像这样动态设置ID,它不是属性,而是特殊令牌。你可能实际上并不需要,如果你提供一个你认为必要的例子,那么也许我们可以建议一个更好的方法。

编辑:这个评论太长了:

kv中id的要点是规则的根小部件获取它们的列表,通过它们可以访问规则的各个小部件。如果你用kv定义一个小部件,它在重要意义上就不是动态的(因为kv规则只是不会改变的初始定义)所以你不需要动态id。如果您以后修改了这些孩子,那么您根本不需要弄乱ID,因为您必须对小部件进行引用,因为您已经专门实例化并添加了它们。您可以通过其他方式存储该引用来访问它(如果您愿意,也可以手动修改ID dict,尽管您不必这样做。)

如果不清楚,您是否可以发布一个最小的工作示例,说明您尝试做什么以及您认为应该做什么,那么我可以解释一下吗?