複数のウィジェットをラベル付きの枠線で囲うウィジェットをLabelFrame(ラベルフレーム)と言います。
tkinter以外ではグループボックスなどと言われます。
このラベルフレームは何かの設定値など、共通の目的を持ったウィジェットを一つにまとめるときに用いられます。
基本的な使い方はFrameに似ていますが、Frameに枠線とラベルが追加されています。
(ラベルフレームの実行例)
(サンプルプログラム)
import tkinter as tk
class Application(tk.Frame):
def __init__(self, master = None):
super().__init__(master)
self.master.title("ラベルフレームの作成") # ウィンドウタイトル
self.master.geometry("300x200") # ウィンドウサイズ(幅x高さ)
#--------------------------------------------------------
# ラベルフレーム1の作成
self.labelframe1 = tk.LabelFrame(self.master, text = "フレーム1")
# ラジオボタンに設定する値
self.radio_value1 = tk.IntVar(value = 0)
# ラジオボタンの作成
self.radio1 = tk.Radiobutton(self.labelframe1, text = "項目1", variable = self.radio_value1, value = 0)
self.radio2 = tk.Radiobutton(self.labelframe1, text = "項目2", variable = self.radio_value1, value = 1)
self.radio3 = tk.Radiobutton(self.labelframe1, text = "項目3", variable = self.radio_value1, value = 2)
self.radio1.pack()
self.radio2.pack()
self.radio3.pack()
# ラベルの配置
self.labelframe1.pack()
#--------------------------------------------------------
# ラベルフレーム2の作成
self.labelframe2 = tk.LabelFrame(self.master, text = "フレーム2", labelanchor = "n", width = 200, height = 100)
self.labelframe2.propagate(False) # 幅と高さを指定する場合はこの設定が必要
# ラジオボタンに設定する値
self.radio_value2 = tk.IntVar(value = 1)
# ラジオボタンの作成
self.radio4 = tk.Radiobutton(self.labelframe2, text = "項目1", variable = self.radio_value2, value = 0)
self.radio5 = tk.Radiobutton(self.labelframe2, text = "項目2", variable = self.radio_value2, value = 1)
self.radio6 = tk.Radiobutton(self.labelframe2, text = "項目3", variable = self.radio_value2, value = 2)
self.radio4.pack(anchor = tk.W)
self.radio5.pack(anchor = tk.W)
self.radio6.pack(anchor = tk.W)
# ラベルの配置
self.labelframe2.pack()
#--------------------------------------------------------
if __name__ == "__main__":
root = tk.Tk()
app = Application(master = root)
app.mainloop()
構文
オブジェクト = tk.LabelFrame(親ウィジェット, オプション1 = 設定値, オプション2 = 設定値,・・・)
オプション
オプション名 | 説明 |
bd | 枠線の太さを指定します。(borderwidthと同じ) |
borderwidth | bdと同じ |
bg | 背景色を指定します。(backgroundと同じ) |
background | bgと同じ |
cursor | ウィジェット上にマウスポインタがある際のカーソルの種類を指定します。 (参考)https://tkdocs.com/shipman/cursors.html |
font | ラベルのフォントを指定します。 |
height | フレームの高さを画素数で指定します。 |
highlightbackground | |
highlightcolor | |
highlightthickness | |
labelanchor | ラベルの表示位置を指定します。 【設定値】e, en, es, n, ne, nw, s, se, sw, w, wn, ws |
labelwidget | ラベルの代わりにButtonなどのウィジェットを指定します。 |
padx | フレームの内側に配置するウィジェットまでの横方向の隙間を指定します。 【初期値】0 |
pady | フレームの内側に配置するウィジェットまでの縦方向の隙間を指定します。 【初期値】0 |
relief | フレームのスタイルを指定します。 【設定値】tk.RAISED, tk.GROOVE, tk.SUNKEN, tk.RIDGE, tk.FLAT |
takefocus | |
text | ラベルの文字列を指定します。 |
width | フレームの幅を画素数で指定します。 |
補足説明
ラベルフレームのサイズ(幅と高さ)指定
widthとheightの値を指定しても、デフォルト状態ではLabelFrameのサイズは変わらず、LabelFrameに配置したウィジェットの大きさに合わせて自動調整されます。
この自動調整を無効にするには ラベルフレームオブジェクト.propagate(False) を実行します。
labelanchorについて
labelanchorでラベルの位置を指定します。
実際にラベルが表示される位置は下図を参照してください。
labelwidgetについて
labelwidgetはラベルの代わりにウィジェットを配置することができます。
下図はラベルの代わりにButtonを配置した例になります。
labelwidget = ウィジェットのオブジェクト
のように指定します。