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

KivyMD调用remove_widget删除widget时报AttributeError错误如何解决

问题原因

报错AttributeError: 'Game' object has no attribute 'test'是因为KV中定义的id不会直接挂载到App类的实例属性上,所有KV中声明的id都存放在加载KV得到的根组件的ids字典中,你没有给Game类的实例定义test属性,自然无法通过self.test访问到对应组件。


1. 删除KV中定义的组件的方法

直接通过根组件的ids字典获取对应id的组件实例后删除即可,两种写法都可以:

def clears(self):
    # 写法1:指定父容器删除
    self.General.ids.BL.remove_widget(self.General.ids.test)
    # 写法2:自动获取组件的父容器删除,不用手动指定父容器
    # self.General.ids.test.parent.remove_widget(self.General.ids.test)

如果要删除KV中定义的two、three按钮,同理把test替换为对应id即可。


2. 删除动态生成的MDIconButton组件的方法

动态添加组件时,把组件实例存到App的实例属性或列表中,需要删除时取出实例操作即可。

示例1:存储所有动态组件,批量删除

class Game(MDApp):
    def build(self):
        self.General = Builder.load_string(KV)
        self.dynamic_btns = [] # 新增列表存储所有动态生成的按钮
        return self.General

    def hod_igrok(self, igrok, mix, miy,status=None):
        # 原有逻辑省略...
        # 创建按钮时存到变量
        btn = MDIconButton(
            pos_hint={"center_x": mix, "center_y": miy},
            icon=r"path %s.png"%igrok,
            user_font_size= '50dp'
        )
        self.General.ids.BL.add_widget(btn)
        self.dynamic_btns.append(btn) # 存入列表
        return self.General

    # 新增批量删除动态组件的方法
    def clear_all_dynamic(self):
        for btn in self.dynamic_btns:
            btn.parent.remove_widget(btn)
        self.dynamic_btns.clear() # 清空列表避免重复删除报错

示例2:动态组件展示指定时间后自动删除

借助kivy.clock实现定时删除:

from kivy.clock import Clock

def hod_igrok(self, igrok, mix, miy,status=None):
    # 原有逻辑省略...
    btn = MDIconButton(
        pos_hint={"center_x": mix, "center_y": miy},
        icon=r"path %s.png"%igrok,
        user_font_size= '50dp'
    )
    self.General.ids.BL.add_widget(btn)
    # 展示3秒后自动删除该按钮
    Clock.schedule_once(lambda dt: btn.parent.remove_widget(btn), 3)
    return self.General

补充说明

如果要清空父容器内的所有组件(包括KV定义的和动态生成的),可以直接调用父容器的clear_widgets方法:

self.General.ids.BL.clear_widgets()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 11:27:03