Kivy如何访问子控件内部的嵌套控件以修改ToggleButton状态
解决方案
问题根因
你当前只遍历了FloatLayout的直接子控件,而目标ToggleButton是嵌套在btn1(Button控件)内部的子控件,不属于FloatLayout的直接子级,所以遍历逻辑匹配不到目标控件。
实现方案
方案1:直接通过id访问(最优)
Kivy会自动收集同一根组件规则(此处为<Main>)下所有带id属性的控件,无论嵌套层级多少,都可以通过根组件的ids字典直接访问,修改onbtn方法即可:
class Main(Screen): def onbtn(self,widget): self.ids.tglbtn1.state = 'down'
方案2:递归遍历全层级子控件(适配未知id的场景)
如果需要批量处理同类控件、或者不知道目标控件的id,可以编写递归遍历逻辑:
class Main(Screen): # 递归遍历所有子控件,把遇到的ToggleButton状态设为down def traverse_set_toggle(self, parent): for child in parent.children: if isinstance(child, ToggleButton): child.state = "down" # 继续遍历当前子控件的下级控件 self.traverse_set_toggle(child) def onbtn(self,widget): self.traverse_set_toggle(self.ids.Fl)
内容的提问来源于stack exchange,提问作者Zayn Naz
相关产品推荐
相关产品推荐

