add_widget到小部件KivyMD?

时间:2020-05-21 00:06:16

标签: python python-3.x kivy

我试图在for循环中将TwoLineIconListItem与add_widget一起使用,但是我不知道如何添加图标。它不带Icon参数,因为每个docs 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()?我不确定如何完成此操作

2 个答案:

答案 0 :(得分:0)

我认为您嵌套的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)

答案 1 :(得分:0)

再看看文档,并从KivyMD支持Discord Channel获得一些帮助,我找到了解决方案。

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

taskkill /F /FI "IMAGENAME eq nginx.exe"

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

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

最后,在我的主要KV字符串(或文件)中添加了<ListWithIcon>: IconLeftWidget: icon: root.icon

这些步骤将使您可以向函数添加#: include listwithicon.kv参数。只需确保通过icon(您的新课程)而不是KivyMD课程ListWithIcon

TwoLineIconListItem