KivyMD中Factory动态生成的MDCheckbox状态检测失效如何解决?
问题原因
你在State方法中调用Factory.Obj_1()生成的是全新的Obj_1实例,这个实例并没有被添加到界面布局中,它的chk_box默认就是未选中状态。你实际操作的是点击Add按钮时生成的、已经挂载到Layout_1下的Obj_1实例,二者是完全独立的对象,所以永远打印False。
修复方案
你可以直接从主布局的子控件中读取已添加的实例,修改后的完整代码如下:
from kivy.lang import Builder from kivy.factory import Factory from kivymd.app import MDApp from kivymd.uix.selectioncontrol import MDCheckbox Root=""" #:import F kivy.factory.Factory <Obj_1@BoxLayout>: MDCheckbox: id:chk_box BoxLayout: id:Layout_1 MDRectangleFlatButton: text:"Add" on_press:root.add_widget(F.Obj_1()) MDRectangleFlatButton: text:"print state" on_press:app.State() """ class Main(MDApp): def build(self): self.root_widget = Builder.load_string(Root) return self.root_widget def State(self): # 遍历Layout_1下的所有子控件读取复选框状态 for child in self.root_widget.ids.Layout_1.children: if hasattr(child, 'ids') and 'chk_box' in child.ids: print('True' if child.ids.chk_box.active else 'False') # 若添加了多个复选框要全部读取,删除下面的break即可 break Main().run()
内容的提问来源于stack exchange,提问作者Ctrl7
相关产品推荐
相关产品推荐

