gpt4 book ai didi

python - Tkinter 在带有 lambda 的 for 循环中分配按钮命令

转载 作者:太空宇宙 更新时间:2023-11-03 21:42:24 25 4
gpt4 key购买 nike

我正在尝试创建一些 Button s(带有 for 循环),如下所示:

def a(self, name):
print(name)

users = {"Test": "127.0.0.0", "Test2": "128.0.0.0"}
row = 1
for name in users:
user_button = Tkinter.Button(self.root, text=name,
command=lambda: self.a(name))
user_button.grid(row=row, column=0)
row += 1

并且每个按钮都获得自己的参数(Test getting "Test" 和 Test2 getting "Test2" ),但是当我按下按钮时,它们都会打印 "Test2"这意味着他们使用具有相同参数的相同函数。

我该如何解决这个问题?

最佳答案

问题是你的lambda for 中的表达式环形。它正在使用 name变量,但是 name for 的每次迭代都会重新分配变量循环,所以最后,所有按钮都获得最后一个值 name被分配到for循环中。为了避免这种情况,您可以在 lambda 中使用默认关键字参数。表达式如下:

user_button = Tkinter.Button(self.root, text=name,
command=lambda name=name: self.a(name))

这绑定(bind) name 的当前值变量为 lambda 的 name每次循环时都使用关键字参数,产生所需的效果。

关于python - Tkinter 在带有 lambda 的 for 循环中分配按钮命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52757314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com