tkinter在循环中创建按钮以传递命令参数,闭包的坑

一次在项目中封装tkinter的时候,在循环遍历生成按钮的时候,发现lambda的入参,总是最后一个,研究了好久终于找到了原因。记录一下,也希望能帮到别人

事故回放:简单写了个例子

解决方法:改成以下写法就可以了,

分析原因:

当使用lambda定义函数时,showFileFrm调用在定义函数时不会得到变量item的值。相反,它会形成一个闭包,这有点像对自己说“我应该寻找我的变量的值”。在我被召唤的时候“.当然,函数是在循环结束后调用的,所以在那个时候,我总是等于循环中的最后一个值。

感谢下面的兄弟提供参考:http://www.imooc.com/wenda/detail/572383

欢迎对it热情的同学,加qq进行技术讨论; QQ:850922253
原文地址:https://www.cnblogs.com/zhangwensi/p/11495822.html