如何使用 kivymd 中的函数更改列表项图标?

Posted

技术标签:

【中文标题】如何使用 kivymd 中的函数更改列表项图标?【英文标题】:How to change List item icon using a function in kivymd? 【发布时间】:2021-11-17 10:10:52 【问题描述】:

我是 kivymd 的初学者。我试图在我的项目中创建一个功能。在此我需要更改 OneLineIconListItem 的图标及其文本。我可以轻松更改文本。但仍然无法更改图标。这是代码中我的问题的一部分。

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:
                    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'
        self.root.ids.control_panel.add_widget(IconLeftWidget(icon='account'))

if __name__ == "__main__":
    DemoApp().run()

当我按下按钮时,图标没有改变,它正在添加一个新图标。如何更改按下按钮时的图标?

【问题讨论】:

【参考方案1】:

用途:

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: jbsidis
                    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 DemoAppjbsidis(MDApp):
    def build(self):
        self.screen = Builder.load_string(KV)
        return self.screen

    def demoFunction(self):
        if self.root.ids.jbsidis.icon=="android-messages":
            self.root.ids.jbsidis.icon="account"
            self.root.ids.control_panel.text="New text hereee, icon is account"
            return 0
        if self.root.ids.jbsidis.icon=="account":
            self.root.ids.jbsidis.icon="android-messages"
            self.root.ids.control_panel.text="New text hereee, icon is android-messages"
            return 0

if __name__ == "__main__":
    DemoAppjbsidis().run()

图片:

【讨论】:

你太酷了,非常感谢。

以上是关于如何使用 kivymd 中的函数更改列表项图标?的主要内容,如果未能解决你的问题,请参考以下文章

Kivymd:如何在不创建自定义类的情况下在列表项中添加复选框?

如何在 KivyMD 中更改 FloatingActionButton 的大小?

列表项 (Kivy & KivyMD) 循环值的回调

Android如何在每个listview列表项上添加图标并更改文本颜色、背景颜色

kivyMD:如何使用工具栏操作项创建下拉菜单?

相当于 Kivy/KivyMD 中的 `wx.CallLater()` 或者如何处理 `time.sleep()` 冻结 GUI?