第 3 章 フレーム

◀ 4.20 スケジュール(タイマー)処理   【目  次】  4.22 ウィンドウハンドルの取得 ▶

999999

 更新日:


 このホームページは Amazon Kindle 本の作成中の草稿です。日々、原稿を見直しているので、内容が変わることに留意して読んで下さい。本が出版され次第、このホームページは削除されます。

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」メソッドで無効にしています。

1
import tkinter as tk
2
root = tk.Tk()
3
root.geometry('300x200+100+100')
4
labelframe = tk.LabelFrame(root, bg='red',
5
        text='labelframe', labelanchor='n',
6
        takefocus=True)
7
labelframe.place(x=50, y=20, width=200, height=160)
8
def callbind_1(event):
9
    print('callbind_1')
10
def callbind_2(event):
11
    print('callbind_2')
12
labelframe.bind('<Button-1>', callbind_1)
13
labelframe.bind('<Button-1>', callbind_2, True)
14
def callkey(event):
15
    print('callkey')
16
labelframe.bind('<KeyPress>', callkey)
17
labelframe.focus_set()
18
def callunbind(event):
19
    labelframe.unbind('<Button-1>')
20
labelframe.bind('<button-3>', callunbind)
21
root.mainloop()

プログラムを実行すると、ウィンドウが表示されます。ラベルフレーム上でマウスの左クリックおよび任意の場所でキー押下をすると下記の文字列が「print」出力されます。ラベルフレーム上でマウスの右クリックをすると、以降、マウスを左クリックしても「print」出力はされません。キー押下による「print」のみが出力されます。

callbind_1
callbind_2
callkey