Home > OS >  Kivy/MD - How do I place an icon to the right of a text list item (with code and image) ..?
Kivy/MD - How do I place an icon to the right of a text list item (with code and image) ..?

Time:01-18

I am trying to put an icon to the right hand side of a text list item, but this code below is giving me an error AttributeError: 'super' object has no attribute '__getattr__' at this line: items.add_widget(icon). Here's what I want it to look like: List item with icon

Here's my code. It can be copied, and run as-is.

from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivymd.app import MDApp
from kivymd.uix.button import MDFlatButton
from kivymd.uix.list import OneLineIconListItem, IconRightWidget, MDList
from kivymd.uix.dialog import MDDialog

KV = '''
<Content>
    orientation: "vertical"
    spacing: "12dp"
    size_hint_y: None
    height: "400dp"
    ScrollView:
        MDList:
            id: Mcontainer

MDFloatLayout:
'''
class Content(BoxLayout):
    pass

class Example(MDApp):
    
    def on_start(self):
    
        Mcontent=Content()
        for x in range(0,7):
            icon = IconRightWidget(icon="lock")
            items = OneLineIconListItem(text="This is a test")
            items.add_widget(icon)
            Mcontent.ids.Mcontainer.add_widget(items)
        
        self.MSetFileOptionsdialog = MDDialog(type="custom",content_cls=Mcontent,)
        
        self.MSetFileOptionsdialog.open()

    def build(self):
        return Builder.load_string(KV)

Example().run()

CodePudding user response:

from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout

from kivymd.app import MDApp
from kivymd.uix.list import OneLineAvatarIconListItem
from kivymd.uix.dialog import MDDialog

KV = '''
<Item>
    _txt_left_pad: "12dp"

    IconRightWidget:
        icon: root.icon


<Content>
    orientation: "vertical"
    spacing: "12dp"
    size_hint_y: None
    height: "400dp"

    ScrollView:

        MDList:
            id: Mcontainer

MDFloatLayout:
'''


class Item(OneLineAvatarIconListItem):
    icon = StringProperty()


class Content(BoxLayout):
    pass


class Example(MDApp):
    def on_start(self):
        Mcontent = Content()

        for x in range(0, 7):
            items = Item(text="This is a test", icon="lock")
            Mcontent.ids.Mcontainer.add_widget(items)

        self.MSetFileOptionsdialog = MDDialog(type="custom", content_cls=Mcontent)
        self.MSetFileOptionsdialog.open()

    def build(self):
        return Builder.load_string(KV)


Example().run()
  •  Tags:  
  • Related