python - 如何从 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()
解决方案
这是在循环中定义 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))
推荐阅读
- powershell - 使用服务帐户执行 powershell 时出现 unknown_user_type 错误
- unity3d - 使向量环相对于世界空间“平坦”
- amazon-web-services - 是否可以在没有 Lambda 的情况下通过 AWS STEP FUNCTION 为 AWS EMR 执行 Step Concurrency?
- java - 在对象创建过程中究竟发生了什么?(爪哇)
- angular - Angular 8/9 -(动态订阅):如何在从集合中获取 Observables 时自动 forkJoin?
- javascript - 部署了用于检查 App Distribution 的 Firebase 功能
- angular - 为什么 execEmbeddedViewsAction 被调用了几次?
- apache-kafka - 将数百万物联网设备中的数据提取到 kafka 主题的最佳工具/技术
- flutter - 如何从 webview flutter 中获取最终 url
- css - 带有反应的AnimeJs实现不起作用