4.24 クラス名とイベント処理(class、bind_class、winfo_class)
複数のラベルフレームに同じイベント処理を設定することができます。フレームと同様に、固有オプションの「class」と Misc クラスの「bind_class」と「winfo_class」メソッドを用います。「3.21 クラス名とイベント処理」を参照して下さい。
次のプログラムは 背景色が「赤」、「緑」、「青」の 3 つのラベルフレーム「labelframe_1」、「labelframe_2」、「labelframe_3」を作成しています。ラベルフレームの「labelframe_2」と「labelframe_3」の「class」オプションに同じクラス名「LabelFrameClass」を指定しています。ここで、キーワード「class」は python の予約語なので、引数では「class_」とします。
ラベルフレーム「labelframe_1」のクラス名を「winfo_class」メソッドで取得して、同じクラス名のオブジェクトに「bind_class」メソッドで、マウスの右クリックのイベントを関数「cbind_1」に関連付けています。
同様に、ラベルフレーム「labelframe_2」のクラス名を「winfo_class」メソッドで取得して、同じクラス名のオブジェクトに「bind_class」メソッドで、マウスの右クリックイベントを関数「cbind_2」に関連付けています。これにより、同じクラス名を設定したラベルフレーム「labelframe_3」にも同様のイベントが関連付けられます
import tkinter as tk | |
root = tk.Tk() | |
root.geometry('300x200+100+100') | |
labelframe_1 = tk.LabelFrame(root, bg='red', | |
text='labelframe_1', labelanchor='n') | |
labelframe_2 = tk.LabelFrame(root, bg='green', | |
text='labelframe_2', labelanchor='n', | |
class_='LabelFrameClass') | |
labelframe_3 = tk.LabelFrame(root, bg='blue', | |
text='labelframe_3', labelanchor='n', | |
class_='LabelFrameClass') | |
labelframe_1.place(x=0, y=0, width=100, height=180) | |
labelframe_2.place(x=100, y=0, width=100, height=180) | |
labelframe_3.place(x=200, y=0, width=100, height=180) | |
def cbind_1(event): | |
print('cbind_1') | |
def cbind_2(event): | |
print('cbind_2') | |
root.bind_class(labelframe_1.winfo_class(), | |
'<Button-3>', cbind_1) | |
root.bind_class(labelframe_2.winfo_class(), | |
'<Button-3>', cbind_2) | |
root.mainloop() |
プログラムを実行すると、3 つのラベルフレームが下図のように表示されます。

「赤」のラベルフレームをマウスで右クリックすると次のように「print」出力されます。
「緑」と「青」のラベルフレームをマウスで右クリックすると次のように「print」出力されます。