Python Tkinter标签未返回正确的值

Python Tkinter标签未返回正确的值,python,tkinter,Python,Tkinter,使用Python2.7和Tkinter。 我在一个循环中创建四个标签并将它们绑定到。我要把标签还给你 标签文本中的名称。 问题是,无论我按下哪个标签,它都会返回最后一个标签中的名称。 我发现这个问题正是我的问题,但给出的解决方案对我来说并不适用,即使我完全复制了代码。 有人喜欢吗?这是我的原始代码: # labelbind.py from Tkinter import * root = Tk() root.title('Label choices') root.geometry('1160x90

使用Python2.7和Tkinter。 我在一个循环中创建四个标签并将它们绑定到。我要把标签还给你 标签文本中的名称。 问题是,无论我按下哪个标签,它都会返回最后一个标签中的名称。 我发现这个问题正是我的问题,但给出的解决方案对我来说并不适用,即使我完全复制了代码。 有人喜欢吗?这是我的原始代码:

# 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() 
#labelbind.py
从Tkinter进口*
root=Tk()
root.title('标签选项')
根几何体('1160x900+650+50')
root.option\u readfile('setstyle2.txt')
def LBL压力(x):
打印“已按下标签”,x
名称=['AMEX'、'CIBC'、'VISA'、'BMO']
col=150
行=45
num=1
对于名称中的名称:
bobo=‘lbl’+str(数量)
打印波波,姓名
bobo=标签(根,文本=名称)
bobo.bind(“”,lambda x=name:lblpress(name))
bobo.place(x=列,y=行)
行+=40
num+=1
root.mainloop()

您不需要向回调传递任何内容。提供给回调的事件对象包含对小部件的引用,您可以从小部件获取文本

例如:

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()
将Tkinter作为tk导入
def lblpress(事件):
打印“标签按下:”,event.widget.cget(“文本”)
root=tk.tk()
名称=['AMEX'、'CIBC'、'VISA'、'BMO']
对于名称中的名称:
label=tk.label(根,文本=名称)
label.bind(“,lblpress)
标签包装(侧面=“顶部”)
root.mainloop()

您不需要向回调传递任何内容。提供给回调的事件对象包含对小部件的引用,您可以从小部件获取文本

例如:

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()
将Tkinter作为tk导入
def lblpress(事件):
打印“标签按下:”,event.widget.cget(“文本”)
root=tk.tk()
名称=['AMEX'、'CIBC'、'VISA'、'BMO']
对于名称中的名称:
label=tk.label(根,文本=名称)
label.bind(“,lblpress)
标签包装(侧面=“顶部”)
root.mainloop()

@brianoakley;我很肯定你会回答,你解决了我的问题。Tkinter文档就像试图破译死海纸莎草纸。。。来源太多,一致性太少。谢谢你@布莱恩·奥克利;我很肯定你会回答,你解决了我的问题。Tkinter文档就像试图破译死海纸莎草纸。。。来源太多,一致性太少。谢谢你!