打印单击按钮的文本tkinter

时间:2015-12-18 18:44:29

标签: python tkinter

这是我的代码:

from tkinter import *    

def command(d):
   print(d)

a = Tk()
b = []

for c in range(0, 5):
    b.append(Button(a, text=c, command=lambda: command(c)))
    b[c].pack()

a.mainloop()

运行脚本时,按钮全部打印4,而我希望它们打印显示在它们上面的数字。你怎么能这样做?

我正在使用Python 3.4

1 个答案:

答案 0 :(得分:5)

乍一看,这里有一些问题。首先,你的for循环需要缩进四个空格,如下所示:

for c in range(0, 5):
    b.append(Button(a, text=c, command=lambda: command(c))
    b[c].pack()

如果你不这样做,那么c的值对于脚本的其余部分将是4,因为这是c的最后一次迭代的值range(0, 5)

您的按钮始终打印4的原因是,在调用回调时评估变量c,而不是在将回调分配给按钮时。避免此问题的一种简单方法是使用虚拟变量(我们将其称为c)使用当前值j初始化lambda函数,如下所示:lambda j=c: command(j)。把它放在一起,你应该有这样的东西:

from tkinter import *    

def command(d):
   print(d)

a = Tk()
b = []

for c in range(0, 5):
    x = Button(a, text=c, command=lambda j=c: command(j))
    x.pack()
    b.append(x)

a.mainloop()

我改变了你打包按钮的方式,因为我觉得它更具可读性,但最终结果应该是一样的。