【问题标题】:How to change List item icon using a function in kivymd?如何使用 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()

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

【问题讨论】:

    标签: python icons kivymd


    【解决方案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()
    

    图片:

    【讨论】:

    • 你太酷了,非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-22
    相关资源
    最近更新 更多