如何更改 kivymd 中其他 kv 字符串的属性?
Posted
技术标签:
【中文标题】如何更改 kivymd 中其他 kv 字符串的属性?【英文标题】:How to change other kv string's property in kivymd? 【发布时间】: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 哦。我绝对不想那样做……有没有办法用循环来做到这一点? 哦,诺诺,你会用循环,给我一些时间,我会尽力回答 【参考方案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 乐于助人:)以上是关于如何更改 kivymd 中其他 kv 字符串的属性?的主要内容,如果未能解决你的问题,请参考以下文章
如何动态更改 MDDialog KivyMD 中的文本字段?
如何在 KivyMD 的 .kv 文件中使用 kivy 中的数据表?