4.21 イベント処理(bind、unbind、focus_set)
ラベルフレームはフレームと同様に、「bind」メソッドでキーボードやマウス操作のイベントを受け取り、処理することができます。また、「unbind」メソッドで設定済の「bind」メソッドを無効にすることができます。キー操作を受け付けるには、フォーカスを受け取る必要があり、「標準オプション」の「takefocus」に「True」を設定します。アプリケーションでフォーカスを設定するには「focus_set」メソッドを用います。「3.18 イベント処理」を参照して下さい。
次のプログラムは、マウスの左クリックのイベント「<button-1>」に「bind」メソッドで関数「callbind_1」と「callbind_2」を関連付けています。また、キーを押下したときのイベント「'<KeyPress>'」に関数「callkey」を関連付けています。「focus_set」メソッドでラベルフレームにフォーカスを設定しています。ラベルフレーム上でマウスを左クリックまたはキーを押下するとそれぞれ関数名を「print」出力します。マウスの右クリックのイベント「<button-3>」に「bind」メソッドで関数「callunbind」を関連付けて、この関数でイベント「<button-1>」を「unbind」メソッドで無効にしています。
import tkinter as tk | |
root = tk.Tk() | |
root.geometry('300x200+100+100') | |
labelframe = tk.LabelFrame(root, bg='red', | |
text='labelframe', labelanchor='n', | |
takefocus=True) | |
labelframe.place(x=50, y=20, width=200, height=160) | |
def callbind_1(event): | |
print('callbind_1') | |
def callbind_2(event): | |
print('callbind_2') | |
labelframe.bind('<Button-1>', callbind_1) | |
labelframe.bind('<Button-1>', callbind_2, True) | |
def callkey(event): | |
print('callkey') | |
labelframe.bind('<KeyPress>', callkey) | |
labelframe.focus_set() | |
def callunbind(event): | |
labelframe.unbind('<Button-1>') | |
labelframe.bind('<button-3>', callunbind) | |
root.mainloop() |
プログラムを実行すると、ウィンドウが表示されます。ラベルフレーム上でマウスの左クリックおよび任意の場所でキー押下をすると下記の文字列が「print」出力されます。ラベルフレーム上でマウスの右クリックをすると、以降、マウスを左クリックしても「print」出力はされません。キー押下による「print」のみが出力されます。
callbind_2
callkey