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

Kivy中如何清除ModelSpecifications组件避免Spinner选择后按钮重复添加

解决方案

问题根因

  • 你在ModelSpecifications的类kv规则中定义的id:anss无法被MainWidget的ids访问:id仅在同一个父组件的kv实例规则范围内生效,类规则的id不属于任何实例的ids集合,因此self.ids["anss"]会报错找不到组件
  • 你之前尝试调用ModelSpecifications.clear_widgets(ModelSpecifications)是错误用法:clear_widgets是实例方法,必须作用在已经创建的ModelSpecifications实例上,不能直接作用在类本身
  • 每次Spinner触发选中事件时你都新建了一个ModelSpecifications实例添加到scd中,旧的实例没有被移除,因此会出现按钮持续累加的问题

修改方法(对原代码改动最小)

只需修改MainWidget类中的btn10方法,在添加新的ModelSpecifications实例前,先移除已存在的旧实例即可:

def btn10(self,text):
    # 先清除已存在的ModelSpecifications实例
    for widget in self.ids.scd.children:
        if isinstance(widget, ModelSpecifications):
            self.ids.scd.remove_widget(widget)
    
    # 后续新增按钮的逻辑保持不变
    self.cal5 = ModelSpecifications()
    a=data2
    b=data3
    c=data4
    mi=[]
    n=0
    while n < len(a):
        aba=(str(a[n])+"\n"+str(b[n])+"\n"+str(c[n]))
        mi.append(aba)
        n+=1
    for i in mi:
        self.b1=Button(text=str(i),size_hint=(1,None),height="100dp")
        self.cal5.add_widget(self.b1)
    self.ids.scd.add_widget(self.cal5, index=3)

可选优化方案

你也可以只创建一次ModelSpecifications实例,后续每次选中Spinner时直接清空实例内的按钮再新增,不用反复创建销毁实例,性能更好:

class MainWidget(Widget):
    an0=tuple(list(OrderedDict.fromkeys(data1)))
    cal5= ObjectProperty(ModelSpecifications()) # 提前创建唯一实例

    def on_kv_post(self, base_widget):
        # kv规则加载完成后将实例添加到布局中
        self.ids.scd.add_widget(self.cal5, index=3)

    def btn10(self,text):
        # 直接清空当前实例内的所有按钮
        self.cal5.clear_widgets()
        
        # 后续新增按钮逻辑不变,无需重复创建实例、重复添加到布局
        a=data2
        b=data3
        c=data4
        mi=[]
        n=0
        while n < len(a):
            aba=(str(a[n])+"\n"+str(b[n])+"\n"+str(c[n]))
            mi.append(aba)
            n+=1
        for i in mi:
            self.b1=Button(text=str(i),size_hint=(1,None),height="100dp")
            self.cal5.add_widget(self.b1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:45:00