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

如何在KivyMD中通过函数修改OneLineIconListItem的列表项图标

KivyMD修改OneLineIconListItem图标解决方案

问题原因

你当前的实现逻辑是每次触发按钮点击事件时,都向OneLineIconListItem新增一个IconLeftWidget实例,原有图标控件没有被修改或移除,所以会出现多个图标叠加的问题。

正确实现步骤

  1. 在KV定义中给内嵌的IconLeftWidget添加唯一id,方便后续直接访问该控件
  2. 按钮点击回调中不需要新增控件,直接通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:48:04