Tkinter分配按钮命令与lambda循环

我试图创建几个按钮(与一个)像这样:

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 

并为每个按钮获取自己的参数(测试获得测试和Test2得到Test2),但是当我按下按钮,他们都打印“测试2”,这意味着他们正在使用相同的参数相同的功能。

我该如何解决这个问题?

One Solution collect form web for “Tkinter分配按钮命令与lambda循环”

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

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

这将每次通过循环将name变量的当前值绑定到lamba的name关键字参数,从而产生所需的效果。

  • 在Tkinter帆布移动球
  • 为什么在声明时执行Button参数“command”?
  • 使用Tkinter将窗口设置为固定大小
  • matplotlib错误 - 没有名为tkinter的模块
  • 当一个Tkinter列表框select被改变时得到一个callback?
  • 构buildtkinter应用程序的最佳方式
  • tkinter:如何使用方法
  • 如何捆绑包括依赖关系的Python应用程序?
  • 如何使用tkinter创build一个计时器?
  • 如何访问tkinter python中不同类的variables3
  • 绘制代码来移动椭圆