このページでは、Tkinter における「ラベルフレーム」ウィジェットの作り方や使い方、オプションについて説明します。
「ラベルフレーム」は「フレーム」と非常に似ているウィジェットになります。要はフレームにラベルをくっつけたのが「ラベルフレーム」です。
なので、使い方もほぼフレームと同じです。このフレームについては下記ページで解説していますので、まだフレームをご存知ない方は、まずはこちらを読んでいただければと思います。
Tkinterの使い方:フレームウィジェット(Frame)の使い方Contents
ラベルフレームとは
ラベルフレームは、その名の通りフレームにラベルをくっつけたウィジェットになります。
ラベルフレームを利用することで、フレーム同様に下記のメリットが得られます。
- レイアウトが楽になる
- グループ単位で一括で処理を実行することができる
- アプリの部品化がしやすい
さらに、フレームとは異なり枠線部にラベルを表示することが可能で、フレーム上に作成したウィジェットがどのような目的で設置されているかをユーザーに伝えやすいというメリットもあります。
分かりやすいのがラジオボタンとの併用だと思います。
例えば下の図のようにラジオボタンを設置しただけだと、これらのラジオボタンが具体的に何を設定するのかがユーザーから一目で分かりにくいです。
一方で、ラベルフレーム上にラジオボタンを作成して配置し、さらにラベルフレームのラベルでこれらのラジオボタンが何を設定するものなのかを説明してやれば、ユーザーから何のためのラジオボタンであるかが分かりやすくなります。
ラベルフレームは、上記の例のラジオボタンだけでなく、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点がフレームとラベルフレームの違いになります。
また、フレームウィジェットの解説ページのフレームウィジェットの作り方・使い方で、フレームを使う際には下記の手順を踏む必要があることを解説しました。
- メインウィンドウの作成とメインループ
- フレームウィジェットの作成(
Frame()
) - フレーム上へのウィジェットの作成と配置
- フレームウィジェットの配置
上記のスクリプトとフレームウィジェットの作り方・使い方で紹介したスクリプトの大きな違いがあるのは 2. のウィジェットの作成部分です。
それ以外は、ラベルフレームでもフレームと同様の手順で利用することができます。
ですので、このページでは 2. のウィジェットの作成部分についてのみラベルフレーム用に解説を行います。
その他の部分については下記ページの特にフレームウィジェットの作り方・使い方の部分を “フレームをラベルフレームに置き換えて” 読んでいただければと思います。
Tkinterの使い方:フレームウィジェット(Frame)の使い方スポンサーリンク
ラベルフレームウィジェットの作成(LabelFrame()
)
ラベルフレームウィジェットは、tkinter の LabelFrame
クラスのコンストラクタを実行することで作成することができます。
# appはメインウィンドウ
frame = tkinter.LabelFrame(
app,
# 略
)
他のウィジェット同様に作成後は pack
や grid
メソッドなどで配置を行う必要があります。
ラベルフレームにラベルを表示したい場合は、LabelFrame
クラスのコンストラクタ実行時に text
オプションに文字列を指定します。
# appはメインウィンドウ
frame = tkinter.LabelFrame(
app,
text="LABEL",
# 略
)
これによりラベルフレームの上側の枠線の左側に text
に指定した文字列が表示されるようになります。
ラベルフレームを使用する際にフレームと異なる手順はこれだけです。
ただしオプションを指定することでラベルフレームの細かい設定を行うこともできます。
例えば text
オプションではなく labelwidget
オプションで表示する文字列を指定するようなことも可能ですし、オプションを指定することでラベルが表示される位置を変更するようなことも可能です。
次はこのラベルフレームのオプションについて解説していきます。
ラベルフレームのオプション
ラベルフレームに指定可能な全オプションは下記により確認することが可能です。
# frameはLabelFrameのインスタンス
print(frame.keys())
このオプションについても、特にラベルの設定を除くオプションの指定方法はフレームと同じで、これらのフレームのオプションについてはフレームの使い方のページで解説しています。
フレームと同様のオプションについては、下記にリンクを貼っておきますので各リンク先から指定方法をご確認いただければと思います。
- width・height
- bg(or background)
- bd(or borderwidth)
- relief
- padx・pady
- cursor
- takefocus
- highlightcolor・highlightbackground・highlightthickness
ただ、これは私の環境だけかもしれませんが、オプション指定時の動作としてはフレームと若干違うものがありそうです。例えば私の環境では、下記のオプション指定時にフレームとラベルフレームとで動作が異なりました。
bd
- フレーム:
relief
を指定しない場合、bd
を指定しても枠線は表示されない - ラベルフレーム:
bd
の設定に応じて枠線の太さが変化する
- フレーム:
highlightcolor
・highlightbackground
・highlightthickness
- フレーム:フォーカスをあてる・外すによってこれらの
highlight
関連の設定に応じて見た目が変化する - ラベルフレーム:フォーカスを当てても見た目が変化しない
- フレーム:フォーカスをあてる・外すによってこれらの
環境によってこのあたりは異なる可能性がありますので、興味のあるオプションについては是非ご自身で試して動作を確認していただければと思います。
以降では、フレームにはないラベルフレーム特有のオプションの指定について解説していきたいと思います。
text
text
はラベル部分に表示する文字列を指定するオプションになります。
text
には文字列を指定します。
例えば下記は、ラベルフレームのラベル部分に "LABEL"
と表示する際の text
オプションの指定例になります。
frame = tkinter.LabelFrame(
app,
text="LABEL", # text
width=400,
height=400
)
スポンサーリンク
fg
(or foreground
)
fg
(or foreground
)はラベル部分に表示する文字列の色を指定するオプションになります。
fg
(or foreground
)にはカラーコードや色名を指定します。
例えば下記は、ラベルフレームのラベル部分に表示する文字列の色を "red"
にする際の fg
オプションの指定例になります。
frame = tkinter.LabelFrame(
app,
text="LABEL",
fg="red", # fg
width=400,
height=400
)
font
font
はラベル部分に表示する文字列のフォントを指定するオプションになります。
font
には tkinter.font.Font
クラスのインスタンスを指定したり、フォントの情報を格納したタプルを指定したりすることができます。
フォントの指定方法の詳細は下記ページで解説していますので、詳しく知りたい方は下記ページを参考にしていただければと思います。
Tkinterの使い方:フォントの指定方法例えば下記は、ラベルフレームのラベル部分の文字列のサイズを 40
に指定する際の font
オプションの指定例になります。
frame = tkinter.LabelFrame(
app,
text="LABEL",
font=("", 40), # font
width=400,
height=400
)
labelwidget
labelwidget
はラベルフレームに表示するラベルを「ラベルウィジェット」として指定するためのオプションになります。
つまり、text
のようにラベルに表示する文字列を指定するのではなく、ラベル部分に表示したいラベルウィジェットそのものを指定します。
labelwidget
を指定した時は、ここまで説明してきた下記オプションは無視されます。
text
fg
(orforeground
)font
上記のオプションだけでは指定できないオプションを指定したい場合に labelwidget
を指定すると便利です。これは、ラベルウィジェットでは上記のオプションだけでなくもっとたくさんのオプションを指定することができるからです。
例えば labelwidget
に指定するラベルウィジェットの見た目を relief
オプションで指定すれば、ラベルフレームのラベル部分の見た目のみを変更するようなこともできます。
また、labelwidget
に指定するラベルウィジェットに image
オプションを指定すれば、文字列ではなく画像をラベルフレームのラベル部分に表示するようなこともできます。
例えば下記は、ラベルフレームのラベル部分に画像を表示する際の labelwidget
オプションの指定例になります。下記では cat.png
というパスの画像がラベル部分に表示されます(cat.png
が存在しないとエラーになるので注意してください)。
# -*- 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
に指定可能な基本パラメータは下記の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.
は省略しています)。
例えば下記は、ラベルフレームのラベル表示位置を tkinter.W+tkinter.S
と指定する際の labelanchor
オプションの指定例になります。
frame = tkinter.LabelFrame(
app,
text="LABEL",
labelanchor=tkinter.W+tkinter.S, # labelanchor
width=400,
height=400
)
ラベルフレーム自体が小さいとどの位置にラベルが表示されているかが分かりにくいので注意してください。
また、labelanchor
でのラベルの表示位置の指定に関しては、labelwidget
指定時も有効です。
まとめ
このページでは tkinter における「ラベルフレームの使い方」について解説しました!
フレームにラベルをくっつけたウィジェットが「ラベルフレーム」です。
フレーム同様に利用することで下記のメリットが得られますし、
- レイアウトが楽になる
- グループ単位で一括で処理を実行することができる
- アプリの部品化がしやすい
さらにラベルが付くので、フレーム内のウィジェットがどのようなものであるかをユーザーに伝えることも可能になります。
特にグループ単位で動作させるラジオボタンと相性が良いウィジェットだと思います!
ラベルフレームも使い方はフレームと似ていますので、ぜひフレームと一緒にラベルフレームの存在や使い方も覚えておきましょう!