【发布时间】:2023-03-12 11:10:01
【问题描述】:
假设我在 Kivy 中动态定义了一些小部件(按钮)并动态分配它们的 ID。 在这个用例中我没有使用 kv 语言。 我可以在不跟踪小部件本身的情况下保留小部件 ID 的引用:然后我想通过它的 ID 访问小部件。 我可以做类似“通过 id 获取小部件”之类的事情吗? (如果我在 kv 文件中定义了小部件,我可以使用 self.ids.the_widget_id 通过其 id 访问小部件本身)
【问题讨论】:
-
为什么要每次都查找而不是保存参考?如果您在 Python 中自己创建小部件,那么跟踪它们是您的工作。如果您想将名称映射到小部件,请自己使用
dict。 -
我明白了,这是一种方法
-
我有点期待这个 dict 可以由 kivy 自己管理,这意味着由“get widget by id”引起的查找将保持轻松。
-
Kivy 中的 ID 与 HTML/JS 中的 ID 不同。 ID 不是全局唯一的 - 它们对于给定规则是唯一的。这是因为您可能会创建包含
SubWidget和id=sub的MyWidget。然后,您可能会创建多个MyWidgets 来复制该 ID。 -
dict查找速度很快。 Kivy 使用的规则 ID 映射只是dicts。如果您实现自己的dict,查找将与您预期的一样轻松。正如 Nykakin 所建议的那样,在树上行走会起作用,但速度会慢很多。