通过Tkinter中的Button将参数传递给函数,循环中出现starnge行为

通过Tkinter中的Button将参数传递给函数,循环中出现starnge行为,第1张

通过Tkinter中的Button将参数传递给函数,循环中出现starnge行为

在这行上:

Button(operator, text=btn_text, width=5, command=lambda: click(btn_text)).grid(row=r,column=c)

btn_text
lambda中的值不会被其当前值冻结。取而代之的是,当
btn_text
在循环的下一次迭代中更改时,它在lambda中求值的值也将更改。这意味着您的所有Button都有效地具有一个
click('C')
命令,因为
'C'
是的最终值
btn_text

你可以做:

command=lambda text=btn_text: click(text)

要么

command=(lambda text: lambda: click(text))(btn_text)

text
将捕获的当前值
btn_text
,此后不会更改。您的命令将使用适当的参数调用。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zaji/5630568.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存