我正在尝试将 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"))