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
相关产品推荐
相关产品推荐

