Kivy/KivyMD开发中TwoLineAvatarIconListItem子控件无法删除问题求助
问题根源
KivyMD的TwoLineAvatarIconListItem属于封装好的复合列表组件,内部预留了专门的属性管理左右两侧图标控件,你直接调用组件顶层的add_widget()方法,并不会把组件添加到官方预设的图标容器中,也不会被组件内部的逻辑登记,所以会出现你说的「找不到子控件、无法删除」的问题。
正确操作方式
添加左侧图标
不要使用add_widget,直接给列表项的left_widget属性赋值即可,系统会自动把图标放到正确的位置,并且内部登记该控件:
# 原来的错误写法 # self.media_list_item.add_widget(self.left_icon_widget) # 修正后的写法 self.media_list_item.left_widget = self.left_icon_widget
如果是右侧图标,对应赋值给right_widget属性即可。
删除左侧图标
不需要手动遍历children再调用remove_widget,直接把left_widget属性设为None,系统会自动移除对应的图标控件:
# 原来的错误写法 # self.media_list_item.remove_widget(self.left_icon_widget) # 修正后的写法 self.media_list_item.left_widget = None
补充说明
如果需要一次添加多个左侧图标,可以操作列表项的_left_widgets列表属性,添加完成后调用self.media_list_item.do_layout()刷新布局即可,删除同理直接操作_left_widgets列表后刷新布局。
内容的提问来源于stack exchange,提问作者campervancoder
相关产品推荐
相关产品推荐

