将_小部件添加到小部件KivyMD?

2024-09-28 23:55:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在for循环中使用带有add_小部件的TwoLineIconListItem,但我不知道如何添加图标。它不接受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()?我不知道如何做到这一点


Tags: textselfaddidsfor部件rootwidget
2条回答

通过第二次查看文档和KivyMD support 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"))

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

相关问题 更多 >