You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 05:45:00