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

KivyMD技术问题:Widget指定ID及动态列表项添加右侧图标失败

问题解答

1. 创建带有按钮的Widget时,如何指定ID?

分两种场景处理:

  • 在KV语言中定义:直接在Widget声明下添加id: 自定义ID名称,示例:

    MDRaisedButton:
        id: add_diet_btn
        text: "Nueva Dieta"
    

    对应的Python类中,可通过self.ids.add_diet_btn获取该按钮实例。

  • 在Python代码中动态创建:创建Widget实例后,直接给id属性赋值,再添加到父容器,父容器的ids字典会自动收录这个ID:

    new_btn = MDRaisedButton(text="新按钮")
    new_btn.id = "dynamic_btn"
    self.ids.box.add_widget(new_btn)
    # 后续可通过self.ids.dynamic_btn访问该按钮
    

    注意:只有当Widget被添加到包含ids字典的父容器(如MDScreen、MDBoxLayout等)时,ID才会被父容器收录。

2. 动态添加带右侧图标的ListItem

你的代码仅创建了OneLineRightIconListItem,但未将IconRightWidget作为子控件添加到列表项中——OneLineRightIconListItem是容器,右侧图标必须作为它的子控件存在。修改buttonClicked方法即可解决:

def buttonClicked(self):
    # 创建列表项
    new_item = OneLineRightIconListItem(text='Button')
    # 创建右侧图标并添加到列表项
    icon_widget = IconRightWidget(icon="dots-vertical")
    new_item.add_widget(icon_widget)
    # 将列表项添加到MDList
    self.ids.box.add_widget(new_item)

另外,你的KV代码中on_press:后无内容,建议补全逻辑或删除该行,避免语法警告。

内容的提问来源于stack exchange,提问作者Eduard Julian Peiro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 02:21:00