add_widget到小部件KivyMD?



我正在尝试将 TwoLineIconListItem 与 for 循环中的add_widget一起使用,但我不知道如何添加图标。它不需要 Icon 参数,因为根据文档,IconLeftWidget 是这样嵌套的:

TwoLineIconListItem:
text: "Two-line item with avatar"
secondary_text: "Secondary text here"
IconLeftWidget:
icon: "language-python"

我知道如何在 KV 语言中执行此操作,但是如何在填充列表的 python for 循环中执行此操作。这是我得到的最接近的,但它将图标放在文本上方

for i, z, n in zip(x[1::2], x[0::2], range(1,10)):
self.root.ids.todays_workout.add_widget(
IconLeftWidget(icon=f"numeric-{n}-box-multiple-outline"))
self.root.ids.todays_workout.add_widget(
TwoLineIconListItem(text=f"{i}", secondary_text=f"{z}"))

也许是嵌套的add_widget()?我不确定如何完成此操作

我认为您的嵌套add_widget()沿着正确的轨道前进,但您实际上无法这样做,因为add_widget()返回None.所以你可以这样做:

for i, z, n in zip(x[1::2], x[0::2], range(1,10)):
icon = IconLeftWidget(icon=f"numeric-{n}-box-multiple-outline"))
listItem = TwoLineIconListItem(text=f"{i}", secondary_text=f"{z}"))
listItem.add_widget(icon)
self.root.ids.todays_workout.add_widget(listItem)

通过再次查看文档和KivyMD支持Discord频道的一些帮助,我找到了解决方案。

您需要创建一个继承自 TwoLineIconListItem 的新类,如下所示:

class ListWithIcon(TwoLineIconListItem):
icon = StringProperty("string")

然后我创建了一个名为listwithicon.kv的新.kv文件,其中包含以下内容(注意类名匹配(

<ListWithIcon>:
IconLeftWidget:
icon: root.icon

最后在我的主KV字符串(或文件(中,我添加了#: include listwithicon.kv

这些步骤将允许您向函数添加icon参数。只要确保通过ListWithIcon(您的新课程(而不是KivyMD课程TwoLineIconListItem

for i, z, n in zip(x[1::2], x[0::2], range(1,number_workouts)):
self.root.ids.todays_workout.add_widget(
ListWithIcon(text=f"{i}", secondary_text=f"{z}", icon=f"numeric-{n}-box-multiple-outline"))

最新更新