使用 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中文网其他相关文章!