如何将标签的文本分配给Tkinter中的按钮命令

时间:2017-10-18 07:16:42

标签: python-3.x button tkinter

我已经写了这段代码。我希望它在按下按钮时在每个按钮附近打印标签文本。例如,当我按下第二个按钮时,它必须打印标签2'。但它始终打印最后一个标签,'标签20'

from tkinter import *
from tkinter import ttk

root = Tk()
for index,i in enumerate(range(0,20)):
    label = ttk.Label(root, text='line {}'.format(i+1))
    label.grid(row=index, column=0)
    button = ttk.Button(root, text='show info', command=lambda: print(label['text']))
    button.grid(row=index, column=1)

root.mainloop()

我该如何解决?

由于

1 个答案:

答案 0 :(得分:0)

在循环中定义的lambda函数只有一个外部作用域。因此,所有lambda实例都引用范围中变量的最后一个值。它可以通过将当前值作为参数绑定到lambda(引入lambda级别范围!)来解决,因此每个lambda获得不同的输入,

from tkinter import *
from tkinter import ttk

root = Tk()
for index,i in enumerate(range(0,20)):
    label = ttk.Label(root, text='line {}'.format(i+1))
    label.grid(row=index, column=0)
    button = ttk.Button(root, text='show info', command=lambda lb=label: print(lb['text']))
    button.grid(row=index, column=1)

root.mainloop()