首页 >后端开发 >Python教程 >如何避免使用 Lambda 函数在 Tkinter For 循环中重新分配按钮命令?

如何避免使用 Lambda 函数在 Tkinter For 循环中重新分配按钮命令?

Linda Hamilton
Linda Hamilton原创
2024-12-15 05:57:17667浏览

How to Avoid Reassigning Button Commands in Tkinter For Loops Using Lambda Functions?

使用 Lambda 在 Tkinter For 循环中分配按钮命令

使用 lambda 函数在 Tkinter 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

中的 lambda 函数for 循环引用同名变量,该变量在每次迭代期间都会重新分配。因此,所有按钮都会调用相同的函数,并将最后一个值分配给名称,从而导致不正确的行为。

解决方案:

要解决此问题,您可以使用默认参数将 name 变量的当前值绑定到 lambda 的关键字参数:

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

通过默认关键字参数,每个按钮的lambda 函数有自己唯一的 name 变量副本,确保单击按钮时使用正确的参数。

以上是如何避免使用 Lambda 函数在 Tkinter For 循环中重新分配按钮命令?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn