首页 > 解决方案 > 如何更改 kivymd 中其他 kv 字符串的属性?

问题描述

我正在使用 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()

我想这样显示 List 但是我的代码出现了这个错误:

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

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

如何更改 ListItem 的文本属性?

标签: listkivypython-3.8kivymd

解决方案


而不是从 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()

推荐阅读