【Python tkinter】LabelFrame(ラベルフレーム)ウィジェットの使い方:オプション一覧
2021.05.31 /
本記事ではPythonのTkinterにおける、LabelFrame(ラベルフレーム)ウィジェットの使用方法やオプションについて解説していきます。
Tkinterとは、PythonでGUIアプリケーションを作成する際に使用するモジュールです。
標準ライブラリなのでPythonが使える環境であればどなたでも使用できます。
Tkinterではウィジェットと呼ばれる様々な部品を使ってGUIアプリケーションを作成していきます。
ウィジェット名 | 説明 |
---|---|
Frame | ウィジェットをまとめるためのコンテナとして使用 |
Label | 文字列やイメージを表示 |
Entry | 1行の文字列入力ボックスを表示 |
Button | 押下できるボタンを表示 |
Checkbutton | チェックボックスとして複数の選択肢を表示 |
Radiobutton | ラジオボタンとして複数の選択肢を表示 |
Listbox | 選択肢のリストを表示 |
Canvas | 線、楕円、多角形などを描画 |
Menubutton | メニュー項目を表示 |
Menu | Menubutton内に含まれるコマンドを提供 |
Message | ユーザーへのメッセージボックスを表示 |
Scale | スケールから値を選択できるグラフィカルスライダーを表示 |
Scrollbar | リストボックスなどのウィジェットにスクロールバーを追加 |
Text | 複数行を入力できるテキストを表示 |
Toplevel | 別のWindowを表示 |
Spinbox | 固定の値を選択できるEntryウィジェットを表示 |
PanedWindow | 複数のペインを含んだコンテナを表示 |
LabelFrame | ラベルを表示するフレーム |
MessageBox | 様々なメッセージボックスを表示 |
ここで解説するLabelFrameウィジェットは、Frame機能を持ったコンテナにラベルを付けることができるウィジェットです。
GUIアプリケーション作成で用いることが多々ありますので、詳しい使い方をマスターしてください。
本記事を通して以下の知識を学べます。
- LabelFrameウィジェットの生成方法や使い方
- 各オプションの使用方法
- 子ウィジェットを無効・有効にする方法
LabelFrame(ラベルフレーム)ウィジェット
LabelFrameウィジェットとは
LabelFrameウィジェットとは、Tkinterで用意されているウィジェットの一つであり、フレームを作成し、そのフレームにラベルを付けることができるウィジェットです。
つまりFrameウィジェットにLabelウィジェットを付けたものだということです。
このLabaelFrameウィジェットを使うとGUIアプリケーションではどのような表示になるかというと、次のようになります。
上図からわかるように、ラベルはフレームの枠線部分に表示されます。
枠線部に表示されるラベルの位置は、オプションで上下左右を変更できます。
このウィジェットにより、フレーム内に配置したウィジェットの目的や用途をユーザーに伝えることができます。
Tkinterで作るGUIアプリケーションのユーザビリティを向上させる上で、LabelFrameウィジェットは欠かせないウィジェットの一つです。
LabelFrameウィジェットの生成
LabelFrameウィジェットを生成するために、次のようにtk.LabelFrameを使用します。
labelframe = tk.LabelFrame(parent,options)
parentには、表示させたいウィジェットまたはメインウィンドウを指定します。
Optionsには、LabelFrameウィジェットに用意されているオプションを指定します。
オプション一覧
LabelFrameウィジェットに用意されているオプションの一覧を以下に記します。
オプション名 | 説明 |
---|---|
bg or background | フレームの背景色 |
bd or borderwidth | フレームのボーダー幅 |
cursor | ホバー時のマウスポインタの種類 |
height | フレームの高さ |
width | フレームの横幅 |
takefocus | Tabキーでのフォーカス移動の有無 |
padx | 枠とウィジェット間の縦の空白 |
pady | 枠とウィジェット間の横の空白 |
relief | フレームの枠の種類 |
text | ラベルに表示するテキスト |
font | ラベルのフォント |
fg or foreground | ラベルの文字色 |
labelanchor | ラベルの表示する位置 |
labelwidget | ラベルウィジェットの指定 |
LabaelFrameウィジェットのフレームに関するオプションは、Frameウィジェットと使い方は同じです。
【Python tkinter】Frame(フレーム)の使い方:作成・配置・オプション一覧
ウィジェットに用意されているオプションの一覧を取得したい場合は、keys()メソッドを対象のウィジェットに使います。
keys()メソッドの戻り値として、そのウィジェットのオプションをリストで返してくれます。
ウィジェット.keys()
各オプションの使用方法
ラベルに表示するテキスト:text
オプションtextによって、LabaelFrameウィジェットのラベルに表示するテキストを指定できます。
labelframe = tk.LabelFrame(frame, text="アプリ一覧")
ラベルのフォント:font
オプションfontによって、LabaelFrameウィジェットのラベルテキストのフォントを指定できます。
第一引数にフォントタイプ、第二引数に文字サイズを指定します。
labelframe = tk.LabelFrame(frame, text="アプリ一覧", font=("Lucida Console", 15))
ラベルの文字色:fg or foreground
オプションfgまたはforegroundによって、LabaelFrameウィジェットのラベルテキストの文字色を指定できます。
labelframe = tk.LabelFrame(frame, text="アプリ一覧", fg="red")
ラベルの表示する位置:labelanchor
オプションlabelanchorによって、LabaelFrameウィジェットのラベルテキストの位置を指定できます。
フレームの枠線上どの位置にラベルを設置するか、東西南北を示す“e, w, s, n”を使用します。
例えば、左上であればwn、右下ならばseといった具合になります。
e, en, es, n, ne, nw, s, se, sw, w, wn, ws
labelframe = tk.LabelFrame(frame, text="アプリ一覧", labelanchor="n")
ラベルウィジェットの指定:labelwidget
オプションlabelwidgetによって、LabaelFrameウィジェットのラベルを、指定したLabelウィジェットにすることができます。
Labelウィジェットを表示できるので、Labelウィジェットにしかないオプションを使って、より凝ったラベルをフレームに表示できます。
また指定できるのはLabelウィジェットだけでなく、他のウィジェットでも指定して表示することが可能です。
例えばオプションimageで画像をラベルに付け加えたり、オプションreliefで見た目を変えたりできます。
オプションlabelwidgetを使う場合は、事前に指定するLabelウィジェットを生成しておく必要があります。
またオプションtext、fg、fontは無視されますのでご注意ください。
LabelFrameの子ウィジェットの無効・有効
LabelFrameに配置した子ウィジェットを選択不可・可能にする無効・有効の方法について説明していきます。
次のようなGUIアプリを例にして説明していきます。
上図のように、LabelFrameウィジェットのラベル「有効」にチェックが付いていないと、LabelFrameの子ウィジェットであるCheckbuttonウィジェットが無効になります。
LabelFrameウィジェットのラベル「有効」にチェックが付くと、Checkbuttonウィジェットが有効になり、操作が可能になります。
このような操作ができるようするための方法を以下で解説していきます。
LabelFrameの子ウィジェットを取得:winfo_children()
LabelFrameウィジェットの子ウィジェットを取得するには、winfo_children()を使います。
wininfo_children()では戻り値に子のリストを返します。
ウィジェット.winfo_children()
LabelFrameウィジェットの子ウィジェット一つ一つに対して、操作をしたい場合は次のようにfor文を使います。
for children in labelframe.winfo_children():
ウィジェットの無効・有効:stateオプションがある場合
対象子ウィジェットにstateオプションがある場合は、子ウィジェットのstateオプションを使って無効・有効を切り替えていきます。
無効にしたい場合はDISABLEDを指定、有効にしたい場合はNORMALを指定するようにします。
flag = tk.DISABLED
children.config(state=flag)
ウィジェットの無効・有効:stateオプションが無い場合
対象子ウィジェットにstateオプションがないが、state()メソッドがあるならば、state()メソッドで子ウィジェットの無効・有効を切り替えていきます。
無効にしたい場合はdisabled、有効にしたい場合は!disabledと指定します。
Stateflags = ['disabled']
children.state(stateflags)
ソースコード
上記で解説してきた方法を使って、子ウィジェットの無効・有効を切り替えるアプリを作成しました。
以下にソースコードを記しますので、コピペして実際に動くのか試してみてください。
import tkinter as tk
def valid():
if check.get() == tk.ON:
flag = tk.NORMAL
stateflags = ['!disabled']
else:
flag = tk.DISABLED
stateflags = ['disabled']
for children in labelframe.winfo_children():
if "state" in children.keys():
children.config(state=flag)
if getattr(children, "state", None) != None:
children.state(stateflags)
root = tk.Tk()
root.title('LabelFrame')
root.geometry('240x100')
check = tk.IntVar(value=tk.ON)
checkbutton_valid = tk.Checkbutton(root, text="有効", variable=check, command=valid)
labelframe = tk.LabelFrame(root, width=150, height=50, labelwidget=checkbutton_valid)
radio = tk.IntVar(value=1)
radio1 = tk.Radiobutton(labelframe, text="機能1", value=1, variable=radio)
radio2 = tk.Radiobutton(labelframe, text="機能2", value=2, variable=radio)
labelframe.pack(pady=10)
radio1.pack()
radio2.pack()
checkbutton_valid.invoke()
root.mainloop()
まとめ
本記事「【Python tkinter】LabelFrame(ラベルフレーム)ウィジェットの使い方:オプション一覧」はいかがでしたか。
LabelFrameウィジェットもButtonやLabel、Entryと同じくらい大事なウィジェットなので、ぜひ使い方を覚えて使ってみてください。