2017-02-25 18 views
0

python 2.7とTkinterを使用しています。 私はループ内に4つのlablesを作成し、それらにバインドしています。私は、ラベルがラベルのテキストに の名前を返すようにします。 問題は、どのラベルを押しても最後のラベルの名前が返されるということです。 私はこの問題を正確には私の問題と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

@Brianオークリー。私はあなたが答えて、あなたが私の問題を解決したことを非常に確信していました。 Tkinterのドキュメンテーションは、死海のパピルスを解読しようとするようなものです...ソースが多すぎるので一貫性はほとんどありません。 Muchas gracias! – Albert

関連する問題