首页 > 解决方案 > 如何从 KivyMD 列表中返回所选项目?

问题描述

我正在尝试编写代码来返回列表中单击的项目的编号,但我不知道在 lambda x 之后需要做什么:

from kivy.lang import Builder
from kivymd.app import MDApp
from kivymd.uix.list import OneLineListItem

KV = '''
ScrollView:

    MDList:
        id: container
'''


class Test(MDApp):
    def build(self):
        return Builder.load_string(KV)

    def on_start(self):
        for i in range(20):
            self.root.ids.container.add_widget(
                OneLineListItem(text=f"Single-line item {i}", on_press=lambda x: print("item number"))
            )

Test().run()

标签: pythonkivykivy-languagekivymd

解决方案


这是在循环中定义 lambda 时的常见问题。解决方法是为 lambda 创建一个新参数,即循环变量的当前值。尝试更换:

OneLineListItem(text=f"Single-line item {i}", on_press=lambda x: print("item number"))

和:

OneLineListItem(text=f"Single-line item {i}", on_press=lambda x, item=i: print("item number", item))

推荐阅读