使用python 2.7和Tkinter。 我在循环中创建四个标签并将它们绑定到。我希望标签返回 标签文本中的名称。 问题是,无论我按哪个标签,它都会返回最后一个标签中的名称。 我发现这个问题Python Tkinter: Bind function with labels in for loop完全是我的问题,但即使我完全复制了代码,给出的解决方案对我也不起作用。 请有人吗?这是我的原始代码:
# labelbind.py
from Tkinter import *
root = Tk()
root.title('Label choices')
root.geometry('1160x900+650+50')
root.option_readfile('setstyle2.txt')
def lblpress(x):
print 'Label pressed', x
names = ['AMEX', 'CIBC', 'VISA', 'BMO']
col = 150
row = 45
num = 1
for name in names:
bobo = 'lbl' + str(num)
print bobo, name
bobo = Label(root, text = name)
bobo.bind('<ButtonRelease-1>', lambda x = name : lblpress(name))
bobo.place(x = col, y = row)
row += 40
num += 1
root.mainloop()
答案 0 :(得分:2)
您无需向回调传递任何内容。给回调的事件对象包含对窗口小部件的引用,您可以从窗口小部件中获取文本。
例如:
import Tkinter as tk
def lblpress(event):
print 'Label pressed:', event.widget.cget("text")
root = tk.Tk()
names = ['AMEX', 'CIBC', 'VISA', 'BMO']
for name in names:
label = tk.Label(root, text=name)
label.bind("<ButtonRelease-1>", lblpress)
label.pack(side="top")
root.mainloop()