如何在 kivymd 中更改其他 kv 字符串的 属性?

How to change other kv string's property in kivymd?

我正在使用 kivymd MDList,但我遇到了问题。

我的代码:

from kivymd.app import MDApp
from kivy.lang.builder import Builder

example_list = ['a', 'b', 'c']

KV = """
ScrollView:
    MDList:
        id: List
"""

ListItem = """
OneLineAvatarListItem:
    id: item
    text: ""
    ImageLeftWidget:
        source: "icon.png"
"""

class MainApp(MDApp):
    def build(self):
        return Builder.load_string(KV)

    def on_start(self):
        for letter in example_list:
            self.root.ids.item.text = letter
            self.root.ids.List.add_widget(Builder.load_string(ListItem))

MainApp().run()

我想显示像this这样的列表,但是我的代码出现了这个错误:

 Traceback (most recent call last):
   File "kivy\properties.pyx", line 861, in kivy.properties.ObservableDict.__getattr__
 KeyError: 'item'

我认为ListItem不是root,但我不知道如何解决。

如何更改 ListItem 的文本 属性?

在这种情况下,与其从 kv 字符串加载小部件,不如在 python 中加载小部件会更容易,只需正常创建 MDList 并在循环的每次迭代中,创建一个新的 OneLineAvatarListItem 小部件,设置它的属性,添加图像,然后将整个小部件添加到 MDList。

代码

from kivymd.app import MDApp
from kivymd.uix.list import OneLineAvatarListItem, ImageLeftWidget
from kivy.lang.builder import Builder

example_list = ['a', 'b', 'c']

KV = """
ScrollView:
    MDList:
        id: List
"""

class MainApp(MDApp):
    def build(self):
        return Builder.load_string(KV)

    def on_start(self):
        global example_list
        for letter in example_list:
            one_line = OneLineAvatarListItem(text = letter)
            image = ImageLeftWidget(source = "icon.png")
            one_line.add_widget(image)
            self.root.ids.List.add_widget(one_line)

MainApp().run()