2017-06-02 22 views
0

リストからラベルを作成しようとしていますが、'<Enter>''<Leave>'のイベントをバインドして、その上にマウスを置くと赤色になります)、ラベルを梱包します。Tkinter(Python)のウィジェットの動的リストにバインドを追加するには

現在のところ、各ラベルを辞書に追加して参照していますが、カーソルがいずれかのラベルを入力すると、最後(最後のラベルのみ)のラベルの背景色が変わります。

from tkinter import * 


random_list = ['ABC', 'DEF', 'GHI', 'JKL', 'MNO', 'PQR'] 


class x: 
    def __init__(self, master): 
     y = {} 
     for i in random_list: 
      y[i] = Label(master, text=i, bg='#00f') 
      y[i].pack() 
      y[i].bind('<Enter>', lambda event: y[i].configure(background='#f00')) 
      y[i].bind('<Leave>', lambda event: y[i].configure(background='#00f')) 


root = Tk() 
app = x(root) 
root.mainloop() 

答えて

3

あなたlambda表現は、それがあったように、私をキャプチャし、この問題を引き起こしています。

ラムダ定義内にi = iを指定することでこれを解決できるはずです。

すなわち、ラムダステートメントを使用して行は次のようになります。

y[i].bind('<Enter>', lambda event, i=i: y[i].configure(background='#f00')) 
y[i].bind('<Leave>', lambda event, i=i: y[i].configure(background='#00f')) 
関連する問題