当我使用add_widget
并尝试使用ids
来访问它时,出现键错误。
def create_rss(self, *args):
for rss in "food", "wood", "stone", "iron", "gold":
self.ids["res"].add_widget(ToggleButton(id=rss, text=rss))
self.ids["res"].ids[rss].state = "down"
我希望能够更改切换按钮的状态,因为在使用add_widget
创建切换按钮之前已经完成了切换按钮。
当尝试打印切换按钮的父级时,我什么也没得到。因此,也许add_widget不能使切换按钮成为“ res”的子代?
答案 0 :(得分:1)
如何访问for循环外的按钮?
有两种解决方法。
此方法涉及创建我们自己的ids
字典类型属性。这种方法的优点是随机访问和顺序访问。
摘要
from kivy.properties import DictProperty
...
class class-name(...):
my_ids = DictProperty({})
def create_rss(self, *args):
for rss in "food", "wood", "stone", "iron", "gold":
toggle_button = ToggleButton(id=rss, text=rss)
self.my_ids[rss] = toggle_button
self.ids["res"].add_widget(toggle_button)
toggle_button.state = "down"
def access_using_my_ids(self):
print(f"\nsequential access:")
for key, value in self.my_ids.items():
print(f"key={key}, value={value}, text={value.text}")
print(f"\nrandom access:")
print(f"object={self.my_ids['stone']}, text={self.my_ids['stone'].text}")
此方法使用Kivy小部件树和for
循环访问子级。这种方法的缺点是只能顺序访问。
摘要
for child in reversed(self.ids.res.children):
if isinstance(child, ToggleButton):
print(f"ToggleButton.text={child.text}")
用Python脚本创建的基维ids
未存储在self.ids
字典类型属性中。因此,尝试访问它时会出错。
将其分配给变量。
def create_rss(self, *args):
for rss in "food", "wood", "stone", "iron", "gold":
toggle_button = ToggleButton(id=rss, text=rss)
self.ids["res"].add_widget(toggle_button)
toggle_button.state = "down"