Tkinterの使い方:ラベルフレームウィジェット(LabelFrame)の使い方

ラベルフレームの使い方の解説ページアイキャッチ

このページでは、Tkinter における「ラベルフレーム」ウィジェットの作り方や使い方、オプションについて説明します。

「ラベルフレーム」は「フレーム」と非常に似ているウィジェットになります。要はフレームにラベルをくっつけたのが「ラベルフレーム」です。

なので、使い方もほぼフレームと同じです。このフレームについては下記ページで解説していますので、まだフレームをご存知ない方は、まずはこちらを読んでいただければと思います。

フレームウィジェットの作り方の解説ページアイキャッチTkinterの使い方:フレームウィジェット(Frame)の使い方

ラベルフレームとは

ラベルフレームは、その名の通りフレームにラベルをくっつけたウィジェットになります。

ラベルフレームの説明図1

ラベルフレームを利用することで、フレーム同様に下記のメリットが得られます。

  • レイアウトが楽になる
  • グループ単位で一括で処理を実行することができる
  • アプリの部品化がしやすい

さらに、フレームとは異なり枠線部にラベルを表示することが可能で、フレーム上に作成したウィジェットがどのような目的で設置されているかをユーザーに伝えやすいというメリットもあります。

分かりやすいのがラジオボタンとの併用だと思います。

例えば下の図のようにラジオボタンを設置しただけだと、これらのラジオボタンが具体的に何を設定するのかがユーザーから一目で分かりにくいです。

ラジオボタンだけだと何を設定するのかが分かりにくい例

一方で、ラベルフレーム上にラジオボタンを作成して配置し、さらにラベルフレームのラベルでこれらのラジオボタンが何を設定するものなのかを説明してやれば、ユーザーから何のためのラジオボタンであるかが分かりやすくなります。

ラベルフレームでラジオボタンが何を設定するものであるかを分かりやすくする例

ラベルフレームは、上記の例のラジオボタンだけでなく、1箇所にまとめて配置したウィジェット群がどのようなものであるかをユーザーに伝えたい場合に活躍するウィジェットになります。

ラベルフレームの作り方・使い方

ラベルフレームの作り方・使い方もほぼフレームと同様です。下記がラベルフレームの使用例のスクリプトになります。

ラベルフレームの使用例
# -*- coding:utf-8 -*-
import tkinter

# メインウィンドウを作成
app = tkinter.Tk()

# メインウィンドウ上にフレームを作成
frame1 = tkinter.LabelFrame(
	app,
	text="ラベルフレーム1"
)

frame2 = tkinter.LabelFrame(
	app,
	text="ラベルフレーム2"
)

# frame1上にウィジェットを作成
canvas = tkinter.Canvas(
	frame1,
	width=300,
	height=300,
	bg="blue"
)
canvas.pack()

button1 = tkinter.Button(
	frame1,
	text="ボタン1",
)
button1.pack()

# frame2上にウィジェットを作成
label = tkinter.Label(
	frame2,
	text="ラベル"
)
label.pack()

button2 = tkinter.Button(
	frame2,
	text="ボタン2"
)
button2.pack()

# フレームを配置
frame1.grid(column=0,row=0)
frame2.grid(column=1,row=0)
# メインループ
app.mainloop()

このスクリプトを実行すると下の図のようなアプリが起動します。

ラベルフレーム使用例のスクリプトを実行することで起動するアプリ

上記スクリプトはフレームウィジェットの解説ページフレームウィジェットの作り方・使い方で紹介したものとほぼ同じですが、アプリの見た目として下記の違いがあります。

  • フレームの時とは異なり、ラベルフレームに枠線がる
  • フレームの時とは異なり、枠線上にラベルが存在している

要は上記の2点がフレームとラベルフレームの違いになります。

また、フレームウィジェットの解説ページフレームウィジェットの作り方・使い方で、フレームを使う際には下記の手順を踏む必要があることを解説しました。

  1. メインウィンドウの作成とメインループ
  2. フレームウィジェットの作成(Frame()
  3. フレーム上へのウィジェットの作成と配置
  4. フレームウィジェットの配置

上記のスクリプトとフレームウィジェットの作り方・使い方で紹介したスクリプトの大きな違いがあるのは 2. のウィジェットの作成部分です。

それ以外は、ラベルフレームでもフレームと同様の手順で利用することができます。

ですので、このページでは 2. のウィジェットの作成部分についてのみラベルフレーム用に解説を行います。

その他の部分については下記ページの特にフレームウィジェットの作り方・使い方の部分を “フレームをラベルフレームに置き換えて” 読んでいただければと思います。

フレームウィジェットの作り方の解説ページアイキャッチTkinterの使い方:フレームウィジェット(Frame)の使い方

スポンサーリンク

ラベルフレームウィジェットの作成(LabelFrame()

ラベルフレームウィジェットは、tkinter の LabelFrame クラスのコンストラクタを実行することで作成することができます。

ラベルフレームの作成
# appはメインウィンドウ
frame = tkinter.LabelFrame(
	app,
	# 略
)

他のウィジェット同様に作成後は packgrid メソッドなどで配置を行う必要があります。

ラベルフレームにラベルを表示したい場合は、LabelFrame クラスのコンストラクタ実行時に text オプションに文字列を指定します。

ラベルに表示する文字列の設定
# appはメインウィンドウ
frame = tkinter.LabelFrame(
	app,
	text="LABEL",
	# 略
)

これによりラベルフレームの上側の枠線の左側に text に指定した文字列が表示されるようになります。

textに指定した文字列がラベルとして表示される様子

ラベルフレームを使用する際にフレームと異なる手順はこれだけです。

ただしオプションを指定することでラベルフレームの細かい設定を行うこともできます。

例えば text オプションではなく labelwidget オプションで表示する文字列を指定するようなことも可能ですし、オプションを指定することでラベルが表示される位置を変更するようなことも可能です。

次はこのラベルフレームのオプションについて解説していきます。

ラベルフレームのオプション

ラベルフレームに指定可能な全オプションは下記により確認することが可能です。

指定可能なオプション
# frameはLabelFrameのインスタンス
print(frame.keys())

このオプションについても、特にラベルの設定を除くオプションの指定方法はフレームと同じで、これらのフレームのオプションについてはフレームの使い方のページで解説しています。

フレームと同様のオプションについては、下記にリンクを貼っておきますので各リンク先から指定方法をご確認いただければと思います。

ただ、これは私の環境だけかもしれませんが、オプション指定時の動作としてはフレームと若干違うものがありそうです。例えば私の環境では、下記のオプション指定時にフレームとラベルフレームとで動作が異なりました。

  • bd
    • フレーム:relief を指定しない場合、bd を指定しても枠線は表示されない
    • ラベルフレーム:bd の設定に応じて枠線の太さが変化する
  • highlightcolorhighlightbackgroundhighlightthickness
    • フレーム:フォーカスをあてる・外すによってこれらの highlight 関連の設定に応じて見た目が変化する
    • ラベルフレーム:フォーカスを当てても見た目が変化しない

環境によってこのあたりは異なる可能性がありますので、興味のあるオプションについては是非ご自身で試して動作を確認していただければと思います。

以降では、フレームにはないラベルフレーム特有のオプションの指定について解説していきたいと思います。

text

text はラベル部分に表示する文字列を指定するオプションになります。

textオプションの説明図

text には文字列を指定します。

例えば下記は、ラベルフレームのラベル部分に "LABEL" と表示する際の text オプションの指定例になります。

textの指定例
frame = tkinter.LabelFrame(
	app,
	text="LABEL", # text
	width=400,
	height=400
)

スポンサーリンク

fg(or foreground

fg(or foreground)はラベル部分に表示する文字列の色を指定するオプションになります。

fgオプションの説明図

fg(or foreground)にはカラーコードや色名を指定します。

例えば下記は、ラベルフレームのラベル部分に表示する文字列の色を "red" にする際の fg オプションの指定例になります。

fgの指定例
frame = tkinter.LabelFrame(
	app,
	text="LABEL",
	fg="red", # fg
	width=400,
	height=400
)

font

font はラベル部分に表示する文字列のフォントを指定するオプションになります。

fontオプションの説明図

font には tkinter.font.Font クラスのインスタンスを指定したり、フォントの情報を格納したタプルを指定したりすることができます。

フォントの指定方法の詳細は下記ページで解説していますので、詳しく知りたい方は下記ページを参考にしていただければと思います。

フォント指定解説ページのアイキャッチTkinterの使い方:フォントの指定方法

例えば下記は、ラベルフレームのラベル部分の文字列のサイズを 40 に指定する際の font オプションの指定例になります。

fontの指定例
frame = tkinter.LabelFrame(
	app,
	text="LABEL",
	font=("", 40), # font
	width=400,
	height=400
)

labelwidget

labelwidget はラベルフレームに表示するラベルを「ラベルウィジェット」として指定するためのオプションになります。

labelwidgetオプションの説明図

つまり、text のようにラベルに表示する文字列を指定するのではなく、ラベル部分に表示したいラベルウィジェットそのものを指定します。

labelwidget を指定した時は、ここまで説明してきた下記オプションは無視されます。

  • text
  • fg(or foreground
  • font

上記のオプションだけでは指定できないオプションを指定したい場合に labelwidget を指定すると便利です。これは、ラベルウィジェットでは上記のオプションだけでなくもっとたくさんのオプションを指定することができるからです。

例えば labelwidget に指定するラベルウィジェットの見た目を relief オプションで指定すれば、ラベルフレームのラベル部分の見た目のみを変更するようなこともできます。

また、labelwidget に指定するラベルウィジェットに image オプションを指定すれば、文字列ではなく画像をラベルフレームのラベル部分に表示するようなこともできます。

例えば下記は、ラベルフレームのラベル部分に画像を表示する際の labelwidget オプションの指定例になります。下記では cat.png というパスの画像がラベル部分に表示されます(cat.png が存在しないとエラーになるので注意してください)。

labelwidgetの指定例
# -*- coding:utf-8 -*-
import tkinter

# メインウィンドウを作成
app = tkinter.Tk()

# 画像オブジェクトを作成
image = tkinter.PhotoImage(
	file="cat.png"
)

# ラベルウィジェットを作成
label = tkinter.Label(
	app,
	image=image,
)

# メインウィンドウ上にラベルフレームを作成
frame = tkinter.LabelFrame(
	app,
	labelwidget=label, # labelwidget
	width=400,
	height=400
)

# ラベルフレームを配置
frame.grid(column=0,row=0)

# メインループ
app.mainloop()

ポイントは tkinter.Label() によりラベルウィジェットを別途作成する必要があるところです。また画像を表示したい場合は tkinter.PhotoImage() により画像オブジェクトも別途作成する必要があります。

スポンサーリンク

labelanchor

labelanchor はラベルを表示する位置を指定するオプションになります。

labelanchorの説明図

labelanchor に指定可能な基本パラメータは下記の4種類になります。

  • tkinter.N
  • tkinter.S
  • tkinter.W
  • tkinter.E

さらに、この4種類を組み合わせて、合計12種類のパラメータを指定可能になります。

  • tkinter.N + tkinter.W:上側の枠線の左側
  • tkinter.N:上側の枠線の中央
  • tkinter.N + tkinter.E:上側の枠線の右側
  • tkinter.S + tkinter.W:下側の枠線の左側
  • tkinter.S:下側の枠線の中央
  • tkinter.S + tkinter.E:下側の枠線の右側
  • tkinter.W + tkinter.N:左側の枠線の上側
  • tkinter.W:左側の枠線の中央
  • tkinter.W + tkinter.S:左側の枠線の下側
  • tkinter.E + tkinter.N:右側の枠線の上側
  • tkinter.E:右側の枠線の中央
  • tkinter.E + tkinter.S:右側の枠線の下側

それぞれを指定したときにラベルが表示される位置は下の図のようになります(図中のパラメータでは tkinter. は省略しています)。

labelanchorに指定可能なパラメータとラベルの表示位置の関係図

例えば下記は、ラベルフレームのラベル表示位置を tkinter.W+tkinter.S と指定する際の labelanchor オプションの指定例になります。

labelanchorの指定例
frame = tkinter.LabelFrame(
	app,
	text="LABEL",
	labelanchor=tkinter.W+tkinter.S, # labelanchor
	width=400,
	height=400
)

ラベルフレーム自体が小さいとどの位置にラベルが表示されているかが分かりにくいので注意してください。

また、labelanchor でのラベルの表示位置の指定に関しては、labelwidget 指定時も有効です。

まとめ

このページでは tkinter における「ラベルフレームの使い方」について解説しました!

フレームにラベルをくっつけたウィジェットが「ラベルフレーム」です。

フレーム同様に利用することで下記のメリットが得られますし、

  • レイアウトが楽になる
  • グループ単位で一括で処理を実行することができる
  • アプリの部品化がしやすい

さらにラベルが付くので、フレーム内のウィジェットがどのようなものであるかをユーザーに伝えることも可能になります。

特にグループ単位で動作させるラジオボタンと相性が良いウィジェットだと思います!

ラベルフレームも使い方はフレームと似ていますので、ぜひフレームと一緒にラベルフレームの存在や使い方も覚えておきましょう!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です