Pass dynamically created button information to a function when they are pressed. kivymd, kivy, python(当按下按钮时,将动态创建的按钮信息传递给函数。猕猴桃、猕猴桃、蟒蛇)
本文介绍了当按下按钮时,将动态创建的按钮信息传递给函数。猕猴桃、猕猴桃、蟒蛇的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
当用户按下按钮上的垃圾桶时,我正在尝试删除有关该按钮的信息。
我的问题是,当用户按下任何按钮的垃圾桶时,只有最后创建的按钮的信息会传递给该函数,因此只会删除最后创建的按钮,而不会删除按下的按钮。
请参见下图。
picture
docs = users_ref.collection(u'Education').stream()
education_lst = []
education_btn = []
for doc in docs:
dict = doc.to_dict()
education_lst.append(dict['Graduation'])
primary = str(dict['University'])
secondary = str(dict['Degree']) + ' in ' + str(dict['Major'])
tertiary = 'Graduation year: ' + dict['Graduation']
btn = ThreeLineAvatarIconListItem(text=primary, secondary_text=secondary, tertiary_text=tertiary)
education_btn.append(btn)
for btn in education_btn:
pic = IconRightWidget(icon='trash-can')
pic.bind(on_release=lambda *args: Education().delete(education_lst[education_btn.index(btn)]))
btn.add_widget(pic)
sm.get_screen('profile').ids.profile_grid.add_widget(btn)
推荐答案
在循环中定义lambda
函数时,这是一个常见问题。在实际执行lambda
之前,不会计算lambda
函数中使用的循环变量。因此,在您的例子中,btn
参数最终是btn
的最后一个值。修复方法是使用一个新变量来保存循环变量的值,如下所示:
pic.bind(on_release=lambda *args, x=btn: self.delete(education_lst[education_btn.index(x)]))
这篇关于当按下按钮时,将动态创建的按钮信息传递给函数。猕猴桃、猕猴桃、蟒蛇的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:当按下按钮时,将动态创建的按钮信息传递给函
基础教程推荐
猜你喜欢
- 如何防止Groupby超越指数? 2022-09-22
- 使用工作区API导入方法导入数据库笔记本(动态内 2022-09-21
- Python h5py-为什么我收到广播错误? 2022-09-21
- 在 pandas 中使用带有多重索引的.loc 2022-09-22
- 从顶点坐标创建三角网格 2022-09-21
- 如何在hdf5文件的多个组之间拆分数据? 2022-09-21
- 在OpenCV中放大后,Python会捕捉图像的特定部分 2022-09-22
- 如何将RPC与Volttron配合使用 2022-09-21
- 跟在带量词的前瞻后面有什么作用? 2022-09-22
- 获取多索引中某个级别的最后一个元素 2022-09-22