Tkinter标签没有返回正确的值

时间:2017-02-25 20:50:09

标签: python tkinter

使用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() 

1 个答案:

答案 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()