【Python tkinter】LabelFrame(ラベルフレーム)ウィジェットの使い方:オプション一覧

時計 2021.05.31 / 時計

【Python tkinter】LabelFrame(ラベルフレーム)ウィジェットの使い方:オプション一覧

本記事では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:LabelFrameウィジェットの表示

上図からわかるように、ラベルはフレームの枠線部分に表示されます

枠線部に表示されるラベルの位置は、オプションで上下左右を変更できます。

このウィジェットにより、フレーム内に配置したウィジェットの目的や用途をユーザーに伝えることができます。

tkinter:LabelFrameの使い方

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ウィジェットと使い方は同じです。

ウィジェットに用意されているオプションの一覧を取得したい場合は、keys()メソッドを対象のウィジェットに使います。
keys()メソッドの戻り値として、そのウィジェットのオプションをリストで返してくれます。

ウィジェット.keys()

各オプションの使用方法

ラベルに表示するテキスト:text

オプションtextによって、LabaelFrameウィジェットのラベルに表示するテキストを指定できます。

labelframe = tk.LabelFrame(frame, text="アプリ一覧")

tkinter:LabelFrameのオプションtest

ラベルのフォント:font

オプションfontによって、LabaelFrameウィジェットのラベルテキストのフォントを指定できます。
第一引数にフォントタイプ、第二引数に文字サイズを指定します。

labelframe = tk.LabelFrame(frame, text="アプリ一覧", font=("Lucida Console", 15))

tkinter:LabelFrameのオプションfont

ラベルの文字色:fg or foreground

オプションfgまたはforegroundによって、LabaelFrameウィジェットのラベルテキストの文字色を指定できます。

labelframe = tk.LabelFrame(frame, text="アプリ一覧", fg="red")

tkinter:LabelFrameのオプションfg

ラベルの表示する位置: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")

tkinter:LabelFrameのオプションlabelanchor

ラベルウィジェットの指定:labelwidget

オプションlabelwidgetによって、LabaelFrameウィジェットのラベルを、指定したLabelウィジェットにすることができます。

Labelウィジェットを表示できるので、Labelウィジェットにしかないオプションを使って、より凝ったラベルをフレームに表示できます。

また指定できるのはLabelウィジェットだけでなく、他のウィジェットでも指定して表示することが可能です。

例えばオプションimageで画像をラベルに付け加えたり、オプションreliefで見た目を変えたりできます。

オプションlabelwidgetを使う場合は、事前に指定するLabelウィジェットを生成しておく必要があります。
またオプションtext、fg、fontは無視されますのでご注意ください。

LabelFrameの子ウィジェットの無効・有効

LabelFrameに配置した子ウィジェットを選択不可・可能にする無効・有効の方法について説明していきます。

次のようなGUIアプリを例にして説明していきます。

tkinter:LabelFrameの子ウィジェットを無効・有効にする(無効)

上図のように、LabelFrameウィジェットのラベル「有効」にチェックが付いていないと、LabelFrameの子ウィジェットであるCheckbuttonウィジェットが無効になります。

tkinter:LabelFrameの子ウィジェットを無効・有効にする(有効)

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と同じくらい大事なウィジェットなので、ぜひ使い方を覚えて使ってみてください。