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

如何在Kivy中通过Popup弹窗运行CheckBox组件并解决集成报错

错误原因

Popup的content参数仅接受Widget子类的实例作为输入,你在onButtonPress3方法中直接传入了CheckBoxesApp类的实例,而CheckBoxesApp继承自App并非Widget子类,因此触发了WidgetException类型校验错误。同时单进程内运行多个Kivy应用实例本身就是不推荐的用法,你可以直接复用已经封装好的Checkboxes组件,不需要额外套一层App。

修改步骤
  1. 调整Checkboxes类中FINISH选项的逻辑,删除关闭全局应用的代码,改为关闭当前弹窗
  2. 修改onButtonPress3方法,直接实例化Checkboxes组件传入Popup即可
关键代码修改

修改Checkboxes类的checkboxes_click方法

def checkboxes_click(self, instance, value, text):
    if value:
        print(f"Select {text}")
        self.myvar = FruitsSellected
        #Close
        if text == 'FINISH':
            print(FruitsSellected)
            self.save()
            # 新增:关闭当前弹窗,不要停止整个主应用
            if hasattr(self, 'popup_ref'):
                self.popup_ref.dismiss()
            return FruitsSellected

        FruitsSellected.append(str(text))

    else:
        print(f"UnSelect {text}")
        FruitsSellected.remove(str(text))

修改onButtonPress3方法

def onButtonPress3(self, button):
    # 直接使用封装好的Checkboxes组件,不需要实例化App
    checkboxes_widget = Checkboxes()
    # 可以按需调整弹窗大小
    popup3 = Popup(title='SELECT', content=checkboxes_widget, size_hint=(0.8, 0.8))
    # 将弹窗实例传给组件,方便点FINISH时关闭
    checkboxes_widget.popup_ref = popup3
    popup3.open()

如果需要保留CheckBoxesApp单独运行的能力可以继续保留,不影响主程序逻辑;如果不需要单独启动复选框页面,可以直接删除CheckBoxesApp类的定义。

内容的提问来源于stack exchange,提问作者nAbscissa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:54:02