如何获取RecycleView中KivyMD列表项文本值并解决点击参数缺失报错
KivyMD RecycleView列表项点击传参报错解决方案
报错原因
你在RecycleView的data字典中直接为on_release赋值self.click_supplier时,KivyMD通过数据渲染TwoLineListItem组件的过程中,不会自动将生成的列表项实例作为参数传递给回调函数,因此调用click_supplier时缺少必填的supplier_list_item参数,触发类型错误。
解决方案
最简单的处理方式是通过lambda闭包直接捕获需要的供应商名称,无需额外获取组件实例,修改两处代码即可:
- 修改
add_supplier_item中on_release的绑定逻辑,增加默认参数避免循环闭包的晚绑定问题:
def add_supplier_item(name_supplier): self.root.get_screen('select_supplier').ids.suppliers_rv.data.append( { "viewclass": "TwoLineListItem", "text": name_supplier, "secondary_text": f'Code: {suppliers_id[suppliers.index(name_supplier)]}', "on_release": lambda supplier=name_supplier: self.click_supplier(supplier), } )
- 调整
click_supplier的入参,直接接收供应商名称赋值:
def click_supplier(self, supplier_name): self.root.get_screen('main').ids.oc_supplier.text = supplier_name self.go_to_screen('main')
修改完成后点击列表项即可正常将选中的供应商名称填充到主页面的输入框中。
内容的提问来源于stack exchange,提问作者Lucas Dueñas
相关产品推荐
相关产品推荐

