我已经写了这段代码。我希望它在按下按钮时在每个按钮附近打印标签文本。例如,当我按下第二个按钮时,它必须打印标签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()
我该如何解决?
由于
答案 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()