2017-02-25 62 views
0

使用python 2.7和Tkinter。 我正在循环中创建四个标签并将它们绑定到。我希望标签在标签文本中返回 的名称。 问题是,无论我按哪个标签,它都会返回最后一个标签中的名称。 我发现这个问题Python Tkinter: Bind function with labels in for loop确切地说是我的问题,但给出的解决方案不适用于我,即使我完全复制了代码。 请人吗?这里是我的原始代码: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() 

回答

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() 
+0

@布赖恩Oakley的;我很确定你会回答,你解决了我的问题。 Tkinter文档就像是试图破译死海纸莎草纸......许多来源,一致性很低。 Muchas gracias! – Albert