tkinter.(ttk.)LabelFrame【ラベル付きフレーム ウィジェット】
メモ ( 作成 例 ラベルの設定 例 子ウィジェットの有効化・無効化 例 ) オプション メソッド 例
メモ
- ラベル付きフレーム ウィジェットの作成〔 例 〕
- tkinter.LabelFrame:従来のウィジェット
- tkinter.ttk.LabelFrame :テーマ付きウィジェット
- ラベルの設定〔 例 〕
ラベル用ウィジェット未使用
オプション tk ttk テキスト text【テキスト文字列】 フォント font【フォント】 ラベル-font【ラベル部 フォント】 前景色 foreground【前景色】 ラベル-foreground【ラベル部 前景色】 背景色 全体の background【背景色】と同色 ラベル-background【ラベル部 背景色】 ラベル用ウィジェット使用
オプション tk ttk labelwidget
【ラベル用ウィジェット】・ラベル用ウィジェットを作成
・明示的な配置はなし
・Label【ラベル ウィジェット】だけでなく Checkbutton【チェックボックス】等も可各種オプション ラベル用ウィジェットのオプション - 子ウィジェットの有効化・無効化〔 例 〕
- ラベル付きフレームには子ウィジェットを操作する機能が無い為、下記で順に処理
- winfo_children( )【子 取得】で子ウィジェットのリストを取得
- 子ウィジェットに state【状態】オプション があれば値を NORMAL【通常状態】 または DISABLED【無効状態】 に設定
(参考:keys( )【オプション名取得】 ・list【リスト型】) - 子ウィジェットに state( )【状態フラグ取得・設定】 メソッド があれば 'disabled'【無効状態】フラグを ON/OFF
ラベル用ウィジェットを対象外にする場合、処理しないか親を変更 (例:Checkbutton【チェックボックス】)
ラベル付きフレーム自体も処理 (ラベル用ウィジェット未使用の場合、グレーアウト) ttk
(参考:組み込み関数の getattr()【属性取得】) - 入れ子の場合は、別途処理が必要
外部リンク
オプション
メモ
- オプションの設定方法
- コンストラクタで辞書型引数 (tk のみ)・キーワード引数として指定
- オプション名を辞書インデックスとして指定 ( widget ['オプション名'] )
- config・configure【オプション設定・取得】で辞書型引数・キーワード引数として指定
- オプション関連のメソッド
- オプション関連メソッド
- Style.configure( ):Style に設定した値
- 注) 実装依存 (各種ドキュメントに相違があり)
オプション 一覧
LabelFrame オプション | |||
---|---|---|---|
ラベル 関連 | tk | ttk | 説明 |
labelwidget | ● | Config | ラベル用ウィジェット ( text【テキスト文字列】より優先 ) |
text | ● | Config | テキスト文字列 〔関連オプション〕 ( labelwidget【ラベル用ウィジェット】を優先 ) |
labelanchor | ● | Config | ラベルの配置位置 |
labelmargins | Style | ラベルの左右マージン | |
labeloutside | Style | ラベルの枠外配置 (True:枠の外 / False:枠の上) | |
font | ● | ※ | フォント (tkinter.Font) ※:text【テキスト文字列】のフォント (ラベル-font で設定) |
(stateflags) | state( ) 〔詳細〕 | 状態フラグ (組合せ) ・(なし):通常状態 ・'disabled':無効状態 (子ウィジェットは影響なし)〔子ウィジェットの有効化・無効化 例 〕 ・'readonly':読み込み専用状態 | |
サイズ・配置 | tk | ttk | 説明 |
height | ● | Config | 高さ (ピクセル単位 等) デフォルト:内部コンテンツのサイズに自動調整 サイズ固定:grid_propagate(False) または pack_propagate(False)【サイズ調整の有無】で調整なし |
width | ● | Config | 幅 (ピクセル単位 等) デフォルト:内部コンテンツのサイズに自動調整 サイズ固定:grid_propagate(False) または pack_propagate(False)【サイズ調整の有無】で調整なし |
padding | ● | 内部間隔のリスト (左端・上端・右端・下端の順) | |
padx | ● | x方向の内部間隔 (ピクセル単位 等) | |
pady | ● | y方向の内部間隔 (ピクセル単位 等) | |
外観 | tk | ttk | 説明 |
borderwidth (bd) | ● | ● (―) | 境界線の幅 |
relief | ● | ● | 外観 |
色 関連 | tk | ttk | 説明 |
background (bg) | ● | Style (―) ラベル部※ | 背景色 空文字列:背景・境界線を非表示 ※:text【テキスト文字列】の背景色 (ラベル-background で設定) |
foreground (fg) | ● | ※ | 前景色 ※:text【テキスト文字列】の前景色 (ラベル-foreground で設定) |
highlightbackground | ● | 外枠の色 (入力フォーカスなし) | |
highlightcolor | ● | 外枠の色 (入力フォーカスあり) | |
highlightthickness | ● | 外枠の幅 (入力フォーカス用) | |
bordercolor | Style | 枠の色 | |
darkcolor | Style | 右下の暗い色 | |
lightcolor | Style | 左上の明るい色 | |
colormap | ○ | カラーマップ | |
visual | ○ | ビジュアル情報 〔Tk_GetVisual (英語)〕 | |
共通 | tk | ttk | 説明 |
class_ | ○ | ○ | クラス名 |
cursor | ● | Config | マウスカーソル名 |
name | ○ | ○ | インスタンス名 (省略:自動命名) 先頭に半角大文字は不可・ドットは不可 / フルパスで一意 〔 インスタンス識別 〕 |
style | Config | スタイル名 (TLabelframe) (ラベルのスタイル名:TLabelframe.Label) | |
takefocus | ● | Config | [Tab]キー等でのフォーカス移動の有無〔フォーカス関連メソッド〕 ・' ' (空文字列):自動設定 ・False:なし (スキップ) ・True:あり (タブストップ) |
underline | Config | 下線の文字位置 (0~) (ショートカットキー用:実装は別途必要) |
text【テキスト文字列】 オプション | |||
---|---|---|---|
ラベル | tk | ttk | 説明 |
ラベル-background | Style | 背景色 | |
ラベル-font | Style | フォント (tkinter.Font) | |
ラベル-foreground | Style | 前景色 |
凡例
●:各種方法で指定可能
○:コンストラクタでのみ指定可能
▲:config( ) 等でのみ指定可能
Config:コンストラクタ 及び config( ) 等で指定可能
Style:Style でのみ指定可能
Method:メソッドの引数で指定
Default:デフォルト値
:テーマ依存
○:コンストラクタでのみ指定可能
▲:config( ) 等でのみ指定可能
Config:コンストラクタ 及び config( ) 等で指定可能
Style:Style でのみ指定可能
Method:メソッドの引数で指定
Default:デフォルト値
:テーマ依存
色 | 説明 |
---|---|
'色名' | 色名:'red'・'green'・'blue'・'gray0'~'gray100'・'system~' 等 下記参照 Tcl8.6/Tk8.6 - Tk Commands - colors (同名色でも HTML5:カラー定義 と定義に差異あり) |
'#RGB' | 16進 4ビット |
'#RRGGBB' | 16進 8ビット |
'#RRRGGGBBB' | 16進 12ビット |
'#RRRRGGGGBBBB' | 16進 16ビット |
ラベル配置位置の詳細 ( labelanchor )
配置位置 | 説明 |
---|---|
'配置位置' | 東西南北 (news) を使用した各辺を3つに分けた12方向 下記参照 |
'nw' NW | 'n' N | 'ne' NE | ||
'wn' | 'en' | |||
'w' W | 'e' E | |||
'ws' | 'es' | |||
'sw' SW | 's' S | 'se' SE |
マウスカーソル名の詳細 ( cursor )
マウスカーソル名 | 説明 |
---|---|
'マウスカーソル名' | 下記参照 ('arrow'・'wait' 等) Tcl8.6/Tk8.6 - Tk Commands - cursors (英語) Tkinter 8.5 reference: a GUI for Python - Cursors (英語) |
内部間隔リストの詳細 ( padding )
指定値 | 説明 |
---|---|
[内部間隔 (左), 内部間隔 (上), 内部間隔 (右), 内部間隔 (下)] | 内部間隔の指定 (左から時計回り) |
[内部間隔 (左), 内部間隔 (上・下), 内部間隔 (右)] | |
[内部間隔 (左・右), 内部間隔 (上・下)] | |
内部間隔 (上・下・左・右) |
外観の詳細 ( relief )
外観 | 説明 |
---|---|
FLAT | フラット |
GROOVE | 凹み枠 |
RAISED | 隆起 (凸) |
RIDGE | 隆起枠 (凸枠) |
SOLID | 実線 |
SUNKEN | 凹み |
メソッド
コンストラクタ | 備考 |
---|---|
LabelFrame(master=None, cnf={ }, **kw) ttk.LabelFrame(master=None, **kw) | コンストラクタ master親 (tkinter.Tk【トップレベルウィンドウ】・コンテナウィジェット) cnf (辞書型引数)辞書型のオプション kw (キーワード引数)オプション (複数可) |
固有メソッド | 備考 |
なし | |
共通メソッド (抜粋) 〔詳細はリンク先〕 | 備考 |
cget( 'option' ) widget['option'] | オプション値 取得 下の構文はオプション値の設定も可 |
config( ~ ) configure( ~ ) | オプション 設定・取得 |
pack( ~ ) | 配置 (パック形式) |
grid( ~ ) | 配置 (グリッド形式) |
place( ~ ) | 配置 (座標形式) |
state( ~ ) ttk | 状態フラグ 取得・設定 |
instate( ~ ) ttk | 状態フラグ チェック |
例
作成
import tkinter as tk
import tkinter.ttk as ttk
# トップレベルウィンドウ作成
root = tk.Tk()
# tk.LabelFrame
labelframe = tk.LabelFrame(
root,
text="LabelFrame",
relief=tk.GROOVE,
background="lightblue",
)
labelframe.pack(side=tk.LEFT, padx=5, pady=5)
# Radio
var_radio = tk.IntVar(value=1)
radio_1 = tk.Radiobutton(
labelframe,
text="Radiobutton (1)",
value=1,
variable=var_radio,
background="lightblue",
)
radio_1.pack(padx=10, pady=5)
radio_2 = tk.Radiobutton(
labelframe,
text="Radiobutton (2)",
value=2,
variable=var_radio,
background="lightblue",
)
radio_2.pack(padx=10, pady=5)
# ttk.LabelFrame
style = ttk.Style()
style.configure(
"example.TLabelframe",
background="lightblue",
)
style.configure(
"example.TLabelframe.Label",
background="lightblue",
)
labelframe_ttk = ttk.LabelFrame(
root,
style="example.TLabelframe",
text="ttk.LabelFrame",
relief=tk.GROOVE,
)
labelframe_ttk.pack(side=tk.LEFT, padx=5, pady=5)
# ttk.Radio
style.configure(
"example.TRadiobutton",
background="lightblue",
)
var_radio_ttk = tk.IntVar(value=1)
radio_ttk_1 = ttk.Radiobutton(
labelframe_ttk,
style="example.TRadiobutton",
text="ttk.Radiobutton (1)",
value=1,
variable=var_radio_ttk,
)
radio_ttk_1.pack(padx=10, pady=5)
radio_ttk_2 = ttk.Radiobutton(
labelframe_ttk,
style="example.TRadiobutton",
text="ttk.Radiobutton (2)",
value=2,
variable=var_radio_ttk,
)
radio_ttk_2.pack(padx=10, pady=5)
# メインループ
root.mainloop()
ラベルの設定
import tkinter as tk
import tkinter.ttk as ttk
from tkinter import font
# トップレベルウィンドウ作成
root = tk.Tk()
font_std = font.Font(size=12, weight="bold")
# tk.LabelFrame
labelframe = tk.LabelFrame(
root,
text="LabelFrame",
font=font_std,
height=50,
width=150,
relief=tk.GROOVE,
background="lightgreen",
foreground="green",
)
labelframe.grid(row=0, column=0, padx=10, pady=10)
# tk.LabelFrame (labelwidget)
labelframe_2 = tk.LabelFrame(
root,
labelanchor=tk.SE,
height=50,
width=150,
relief=tk.GROOVE,
background="lightgreen",
)
widget = tk.Label(
labelframe_2,
text="Label",
font=font_std,
background="blue",
foreground="white",
)
labelframe_2['labelwidget'] = widget
labelframe_2.grid(row=1, column=0, padx=10, pady=10)
# ttk.LabelFrame
style = ttk.Style()
style.configure(
"example.TLabelframe",
background="lightgreen",
)
style.configure(
"example.TLabelframe.Label",
font=font_std,
background="green",
foreground="white",
)
labelframe_ttk = ttk.LabelFrame(
root,
style="example.TLabelframe",
text="ttk.LabelFrame",
height=50,
width=150,
relief=tk.GROOVE,
)
labelframe_ttk.grid(row=0, column=1, padx=10, pady=10)
# ttk.LabelFrame (labelwidget)
labelframe_ttk_2 = ttk.LabelFrame(
root,
style="example.TLabelframe",
labelanchor=tk.SE,
height=50,
width=150,
relief=tk.GROOVE,
)
widget_ttk = ttk.Label(
labelframe_ttk_2,
text="ttk.Label",
font=font_std,
background="blue",
foreground="white",
)
labelframe_ttk_2['labelwidget'] = widget_ttk
labelframe_ttk_2.grid(row=1, column=1, padx=10, pady=10)
# メインループ
root.mainloop()
子ウィジェットの有効化・無効化
Progressbar【プログレスバー】の変更が判別できる様にテーマ変更
import tkinter as tk
import tkinter.ttk as ttk
def set_state():
if var_check.get() == tk.ON:
flag = tk.NORMAL
stateflags = ['!disabled']
else:
flag = tk.DISABLED
stateflags = ['disabled']
for child in labelframe.winfo_children():
keys = child.keys()
if "state" in keys:
child.config(state=flag)
if getattr(child, "state", None) != None:
child.state(stateflags)
def set_state_ttk():
if var_check_ttk.get() == tk.ON:
flag = tk.NORMAL
stateflags = ['!disabled']
else:
flag = tk.DISABLED
stateflags = ['disabled']
for child in labelframe_ttk.winfo_children():
keys = child.keys()
if "state" in keys:
child.config(state=flag)
if getattr(child, "state", None) != None:
child.state(stateflags)
# トップレベルウィンドウ作成
root = tk.Tk()
style = ttk.Style()
style.theme_use("alt")
# tk.LabelFrame
labelframe = tk.LabelFrame(
root,
relief=tk.GROOVE,
)
labelframe.grid(row=0, column=0, padx=10, pady=5)
# Checkbutton
var_check = tk.IntVar(value=tk.ON)
checkbutton = tk.Checkbutton(
root,
command=set_state,
text="有効",
variable=var_check,
)
labelframe['labelwidget'] = checkbutton
labelframe.pack(side=tk.LEFT, padx=10, pady=10)
# Radio
var_radio = tk.IntVar(value=1)
radio_1 = tk.Radiobutton(
labelframe,
text="Radiobutton (1)",
value=1,
variable=var_radio,
)
radio_1.pack(padx=10, pady=5)
radio_2 = tk.Radiobutton(
labelframe,
text="Radiobutton (2)",
value=2,
variable=var_radio,
)
radio_2.pack(padx=10, pady=5)
# Progressbar
progressbar = ttk.Progressbar(
labelframe,
value=50,
)
progressbar.pack(padx=10, pady=5)
# ttk.LabelFrame
labelframe_ttk = ttk.LabelFrame(
root,
relief=tk.GROOVE,
)
# ttk.Checkbutton
var_check_ttk = tk.IntVar(value=tk.ON)
checkbutton_ttk = ttk.Checkbutton(
root,
command=set_state_ttk,
text="有効",
variable=var_check_ttk,
)
labelframe_ttk['labelwidget'] = checkbutton_ttk
labelframe_ttk.pack(side=tk.LEFT, padx=10, pady=10)
# ttk.Radio
var_radio_ttk = tk.IntVar(value=1)
radio_ttk_1 = ttk.Radiobutton(
labelframe_ttk,
text="Radiobutton (1)",
value=1,
variable=var_radio_ttk,
)
radio_ttk_1.pack(padx=10, pady=5)
radio_ttk_2 = ttk.Radiobutton(
labelframe_ttk,
text="Radiobutton (2)",
value=2,
variable=var_radio_ttk,
)
radio_ttk_2.pack(padx=10, pady=5)
# Progressbar
progressbar_ttk = ttk.Progressbar(
labelframe_ttk,
value=50,
)
progressbar_ttk.pack(padx=10, pady=5)
# メインループ
checkbutton.invoke()
checkbutton_ttk.invoke()
root.mainloop()