3. 8 フォーカスとハイライト( takefocus、highlightthickness、highlightcolor、highlightbackground)
フレームはキー入力を受け付けるフォーカスを受け取ることができます。フォーカスを受け取るには「標準オプション」の「takefocus」オプションに「True」を設定します。デフォルトでは「False」が設定されていて、フォーカスを受け取ることができないように設定されています。
フレームがフォーカスを持つときの強調表示にハイライト枠を設定することができます。ハイライト枠はフレーム領域の内側で境界枠の外側に設定されます。枠幅の設定は「標準オプション」の「highlightthickness」オプションを用います。デフォルトでは「0」ピクセルが設定されていて、枠は設定されていません。
フォーカスを持つときの強調表示の色は「標準オプション」の「highlightcolor」、フォーカスを持たないときの強調表示の色は「標準オプション」の「highlightbackground」オプションに設定します。
ハイライト枠を設定してもフレームのサイズは変更されません。フレームの座標系は 3.7 項のパッディングの内側に設定されます。ウィジェットはハイライト枠を含めてフレームの全域に設定することができます。
次のプログラムは境界枠の幅が「10」ピクセル、形状が「ridge」のフレームに、ハイライト枠を設定しています。枠幅を「10」ピクセル、フォーカスを持つときの色を「yellow」、フォーカスを持たないときの色を「green」に設定しています。フォーカスを持たないときと持ったときのフレームの状態を表示するために、同じフレームを 2 つ作成して並べて表示しています。
import tkinter as tk | |
root = tk.Tk() | |
root.geometry('300x200+100+100') | |
dcnf = {'width':100, 'height':160, | |
'bg':'red', | |
'bd':10, 'relief':'ridge', | |
'highlightthickness':10, | |
'highlightcolor':'yellow', | |
'highlightbackground':'green', | |
'takefocus':True} | |
frame = tk.Frame(root, cnf=dcnf) | |
frame.place(x=30, y=20) | |
frame2 = tk.Frame(root, cnf=dcnf) | |
frame2.place(x=170, y=20) | |
root.mainloop() |
このプログラムを実行すると、下図のように 2 つのフレームが表示され「Tab」キーでフォーカスが移動します。フォーカスを持つフレームはハイライト枠の色が黄色で表示されます。