如何在KivyMD中通过函数修改OneLineIconListItem的列表项图标
KivyMD修改OneLineIconListItem图标解决方案
问题原因
你当前的实现逻辑是每次触发按钮点击事件时,都向OneLineIconListItem新增一个IconLeftWidget实例,原有图标控件没有被修改或移除,所以会出现多个图标叠加的问题。
正确实现步骤
- 在KV定义中给内嵌的
IconLeftWidget添加唯一id,方便后续直接访问该控件 - 按钮点击回调中不需要新增控件,直接通过id修改原有图标的
icon属性即可
完整可运行代码
from kivy.lang import Builder from kivymd.app import MDApp from kivymd.uix.list import OneLineIconListItem,IconLeftWidget KV = """ MDScreen: ScrollView: pos_hint : {"center_x": 0.5, 'center_y':0.3} MDList: OneLineIconListItem: id: control_panel text: 'Message' IconLeftWidget: id: left_icon # 给图标控件添加id icon:'android-messages' MDRectangleFlatButton: text: "change" user_font_size: "30sp" pos_hint: {'center_x':0.5, 'center_y':0.5} on_release: app.demoFunction() """ class DemoApp(MDApp): def build(self): self.screen = Builder.load_string(KV) return self.screen def demoFunction(self): self.root.ids.control_panel.text = 'Control panel' # 直接修改原有图标控件的icon属性,不需要新增 self.root.ids.left_icon.icon = 'account' if __name__ == "__main__": DemoApp().run()
内容的提问来源于stack exchange,提问作者Shourov
相关产品推荐
相关产品推荐

