Python 3.x 如何在通过add_widget创建之后访问widget?
当我使用add_小部件并尝试使用id访问它时,我得到一个关键错误Python 3.x 如何在通过add_widget创建之后访问widget?,python-3.x,kivy,Python 3.x,Kivy,当我使用add_小部件并尝试使用id访问它时,我得到一个关键错误 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" 我希望能够更改切换按钮的状态,因
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,它不会使切换按钮成为res的子对象?问题
如何访问for循环外侧的按钮 解决方案 解决方案有两种方法 方法1-创建自己的ids字典 此方法涉及创建我们自己的ids字典类型属性。这种方法的优点是随机存取和顺序存取 片段 方法2-Kivy小部件树 此方法使用Kivy小部件树和for循环来访问子级。这种方法的缺点是只进行顺序存取 片段 Kivy ID-用Python脚本创建 在Python脚本中创建的Kivy ID不存储在self.ids字典类型属性中。因此,在尝试访问它时会出现错误 解决方案 将其分配给一个变量 片段
如何访问for循环外侧的按钮?有关访问for循环外侧的切换按钮的解决方案,请参阅更新的帖子。
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}")
for child in reversed(self.ids.res.children):
if isinstance(child, ToggleButton):
print(f"ToggleButton.text={child.text}")
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"