【问题标题】:How to change other kv string's property in kivymd?如何更改 kivymd 中其他 kv 字符串的属性?
【发布时间】:2021-04-14 19:09:58
【问题描述】:

我使用的是 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 的文本属性?

【问题讨论】:

  • 好像没有,我用的KivyMD不是很多,但是看到小部件,那边没有text属性
  • 好的。我的错。 ListItem 中有文本属性。我会编辑。
  • 我认为你需要创建一个普通的BoxLayout并为每个字母添加一个ListItem
  • 哦。我绝对不想那样做……有没有办法用循环来做到这一点?
  • 哦,诺诺,你会用循环,给我一些时间,我会尽力回答

标签: list kivy python-3.8 kivymd


【解决方案1】:

在这种情况下,与其从 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()

【讨论】:

  • 谢谢!但我的最后一个问题:在 PyCharm 中,它运行良好,但在 source = "icon.png" 上显示警告 Unexpected argument。你知道为什么吗?谢谢!
  • @JayLee 可能是因为 init 没有源参数,尝试这样做image = ImageLeftWidget() 然后在下一行image.source = "icon.png"
  • @JayLee 乐于助人:)
猜你喜欢
  • 2013-07-05
  • 2021-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-20
  • 1970-01-01
  • 2017-03-13
相关资源
最近更新 更多