2017-02-25 64 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