tkinter.ttk.Notebook【ノートブック (タブ切換) ウィジェット】
メモ ( 作成 例 タブの追加 例 ショートカットキー 例 ) 仮想イベント 例 オプション メソッド 例 ( オプション設定 ・タブ部の動的外観変更 )
メモ
- ノートブック (タブ切換) ウィジェットの作成〔 例 〕
- tkinter.ttk.Notebook:テーマ付きウィジェット
- タブの追加〔 例 〕
- add( )【タブ 追加・復元】・insert( )【タブ 挿入・移動】で Frame【フレーム】等のウィジェットを追加
- タブのテキスト:text【タブのテキスト文字列】
- タブ切換のショートカットキー〔 例 〕
外部リンク
仮想イベント
- イベント設定〔 例 〕
- bind( )【イベント関連付け】で設定 〔イベント関連メソッド 〕
仮想イベント | 説明 |
---|---|
<<NotebookTabChanged>> | 新しいタブの選択後に発生 (1つ目のタブの追加で選択されても発生) 引数 eventイベントオブジェクト |
オプション
メモ〔 例 〕
- オプションの設定方法
- コンストラクタで辞書型引数 (tk のみ)・キーワード引数として指定
- オプション名を辞書インデックスとして指定 ( widget ['オプション名'] )
- config・configure【オプション設定・取得】で辞書型引数・キーワード引数として指定
- オプション関連のメソッド
- オプション関連メソッド
- Style.configure( ):Style に設定した値
- 注) 実装依存 (各種ドキュメントに相違があり)
オプション 一覧
Notebook オプション | |||
---|---|---|---|
サイズ・配置 | tk | ttk | 説明 |
height | Config | ペイン部の高さ (0以下:最大の高さ) | |
width | Config | ペイン部の幅 (0以下:最大の幅) | |
padding | ● | 内部間隔 (間隔のリスト) | |
(stateflags) | state( ) 〔詳細〕 | 状態フラグ (組合せ) ・(なし):通常状態 ・'active':アクティブ状態 ・'disabled':無効状態 ・'selected':選択状態 | |
tabmargins | Style | タブ部の外部間隔 (間隔のリスト) 〔タブ-expand【タブ部の拡大サイズ】〕 | |
tabposition | Style | タブの配置位置 | |
色 関連 | tk | ttk | 説明 |
background | Style | 背景色 (テーマにより対象領域相違) | |
foreground | Style | 前景色 | |
bordercolor | Style | ペインの境界線の色 | |
darkcolor | Style | ペイン右下の暗い色 | |
lightcolor | Style | ペイン左上の明るい色 | |
共通 | tk | ttk | 説明 |
class_ | ○ | クラス名 | |
cursor | Config | マウスカーソル名 | |
name | ○ | インスタンス名 (省略:自動命名) 先頭に半角大文字は不可・ドットは不可 / フルパスで一意 〔 インスタンス識別 〕 | |
style | Config | スタイル名 (TNotebook) (タブのスタイル名:TNotebook.Tab) | |
takefocus | Config | [Tab]キー等でのフォーカス移動の有無〔フォーカス関連メソッド〕 ・' ' (空文字列):自動設定 ・False:なし (スキップ) ・True:あり (タブストップ) |
タブ オプション | |||
---|---|---|---|
個別 | tk | ttk | 説明 |
state | Method | 状態 ・NORMAL:通常状態 ・DISABLED:タブ選択不可 ・HIDDEN:非表示 | |
テキスト・画像 | tk | ttk | 説明 |
font | Style | フォント (tkinter.Font) | |
text | Method | タブのテキスト文字列 | |
compound | Method | テキストと画像の合成 (テキスト対しての画像位置) | |
image | Method | 画像 | |
サイズ・配置 | tk | ttk | 説明 |
expand | Style | タブ部の拡大サイズ (間隔のリスト) 〔tabmargins【タブ部の外部間隔】〕 | |
padding | Method | ペイン部と挿入ウィジェットの間隔 (間隔のリスト) | |
sticky | Method | ペイン部の配置方法 〔grid( )【配置 (グリッド形式)】 の sticky【固定位置】 参照〕 | |
色 関連 | tk | ttk | 説明 |
background | Style | タブ部の背景色 | |
foreground | Style | タブ部の前景色 | |
(activebackground) | Style.map() [background] | タブ部のアクティブ状態の背景色 | |
(activeforeground) | Style.map() [foreground] | タブ部のアクティブ状態の前景色 | |
(disabledbackground) | Style.map() [background] | タブ部の無効状態の背景色 | |
(disabledforeground) | Style.map() [foreground] | タブ部の無効状態の前景色 | |
(selectedbackground) | Style.map() [background] | タブ部の選択状態の背景色 | |
(selectedforeground) | Style.map() [foreground] | タブ部の選択状態の前景色 | |
bordercolor | Style | タブ部の境界線の色 | |
共通 | tk | ttk | 説明 |
underline | Method | 下線の文字位置 (0~) 〔enable_traversal( )【ショートカットキーの有効化】〕 |
凡例
●:各種方法で指定可能
○:コンストラクタでのみ指定可能
▲:config( ) 等でのみ指定可能
Config:コンストラクタ 及び config( ) 等で指定可能
Style:Style でのみ指定可能
Method:メソッドの引数で指定
Default:デフォルト値
:テーマ依存
○:コンストラクタでのみ指定可能
▲:config( ) 等でのみ指定可能
Config:コンストラクタ 及び config( ) 等で指定可能
Style:Style でのみ指定可能
Method:メソッドの引数で指定
Default:デフォルト値
:テーマ依存
タブ部の動的外観変更〔 例 〕
style.map (スタイル名, 対象 = [(状態, 状態の値)])
対象 | 状態 | オプション | 備考 |
---|---|---|---|
background 【背景色】 | active【アクティブ状態】 | (activebackground) | マウスが上にある |
disabled【無効状態】 | (disabledbackground) | ||
selected【選択状態】 | (selectedbackground) | ||
foreground 【前景色】 | active【アクティブ状態】 | (activeforeground) | マウスが上にある |
disabled【無効状態】 | (disabledforeground) | ||
selected【選択状態】 | (selectedforeground) |
色 | 説明 |
---|---|
'色名' | 色名:'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ビット |
タブの配置位置の詳細 ( tabposition )
配置位置 | 説明 |
---|---|
'配置位置' | 東西南北 (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 (英語) |
テキストと画像の合成の詳細 ( タブ-compound )
指定値 | 説明 (テキスト対しての画像位置) |
---|---|
'text' | テキストのみ表示 |
'image' | 画像のみ表示 |
NONE | テキストの代わりに画像表示 |
BOTTOM | 画像をテキストの下側に表示 |
TOP | 画像をテキストの上側に表示 |
LEFT | 画像をテキストの左側に表示 |
RIGHT | 画像をテキストの右側に表示 |
CENTER | 画像をテキストの上に表示 |
メソッド
コンストラクタ | 備考 |
---|---|
ttk.Notebook(master=None, **kw) | コンストラクタ master親 (tkinter.Tk【トップレベルウィンドウ】・コンテナウィジェット) kw (キーワード引数)オプション (複数可) |
固有メソッド | 備考 |
共通引数 | タブ下記でタブ指定 ・タブのインデックス (0 ~ タブ数-1) ・ウィジェット名 ・'@x,y' 形式のタブ識別 ・CURRENT:選択中のタブ |
add(child, **kw) | タブの追加・復元 childウィジェット (Frame【フレーム】等) kw (キーワード引数)タブ オプション |
enable_traversal( ) | タブ切換のショートカットキーの有効化 例: ・[Ctrl] + [Tab]:次のタブ ・[Shift] + [Ctrl] + [Tab]:前のタブ ・[Alt] + ショートカットキー:指定したタブ 〔underline【下線の文字位置】〕 |
forget(tab_id) | タブの削除 tab_idタブ |
hide(tab_id) | タブの非表示 tab_idタブ |
index(tab_id) | タブのインデックス取得 戻り値該当タブのインデックス / タブ総数 tab_idタブ / END (タブ総数取得) |
insert(pos, child, **kw) | タブの挿入・移動 (存在する場合は移動) pos挿入位置 (END:末尾 / タブのインデックス / ウィジェット名) childウィジェット (Frame【フレーム】等) kw (キーワード引数)タブ オプション |
select(tab_id=None) | タブ選択 (ウィジェット名取得) 戻り値 (取得:引数省略)選択中のウィジェット名 tab_id選択するタブ |
tab(tab_id, option=None, **kw) | タブオプションの取得・設定 戻り値 (全取得:オプション未指定)辞書型のタブオプション 戻り値 (個別取得:オプション名のみ指定)オプション値 戻り値 (設定:オプション値指定)無効 tab_idタブ option取得オプション名 kw (キーワード引数)タブ オプション |
tabs( ) | 管理ウィジェット名取得 戻り値管理ウィジェット名のリスト (タブのインデックス順) |
共通メソッド (抜粋) 〔詳細はリンク先〕 | 備考 |
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()
# ttk.Notebook
notebook = ttk.Notebook(
root,
height=100,
width=200,
)
notebook.pack(padx=10, pady=10, fill=tk.BOTH, expand=True)
# ttk.Frame (1~3)
frames = []
for i in range(1, 4):
widget = ttk.Frame(
root,
relief=tk.RIDGE,
)
frames.append(widget)
notebook.add(widget, text="TAB_" + str(i))
# ttk.Frame (0)
widget = ttk.Frame(
root,
relief=tk.RIDGE,
)
frames.insert(0, widget)
notebook.insert(0, widget, text="TAB_0")
notebook.select(0)
# メインループ
root.mainloop()
タブ切換のショートカットキー
仮想イベント
import tkinter as tk
import tkinter.ttk as ttk
from tkinter import font
def msg_event(event):
var_msg.set(notebook.select())
# トップレベルウィンドウ作成
root = tk.Tk()
font_std = font.Font(size=12)
# ttk.Label
label = ttk.Label(
root,
font=font_std,
text="・[Ctrl] + [Tab]:次のタブ\n" +
"・[Shift] + [Ctrl] + [Tab]:前のタブ\n" +
"・[Alt] + [0 ~ 3]",
relief=tk.SUNKEN,
)
label.pack(padx=5, pady=10, ipady=5, fill=tk.X)
# ttk.Label
var_msg = tk.StringVar(value="label_msg")
label_msg = ttk.Label(
root,
font=font_std,
textvariable=var_msg,
relief=tk.SUNKEN,
)
label_msg.pack(side=tk.BOTTOM, fill=tk.X)
# ttk.Notebook
notebook = ttk.Notebook(
root,
height=100,
width=200,
)
notebook.enable_traversal()
notebook.bind("<<NotebookTabChanged>>", msg_event)
notebook.pack(padx=10, pady=10, fill=tk.BOTH, expand=True)
# ttk.Frame (0~3)
frames = []
for i in range(4):
widget = ttk.Frame(
root,
relief=tk.RIDGE,
name="frame_" + str(i),
)
frames.append(widget)
notebook.add(
widget,
underline=5,
text="TAB (" + str(i) + ")"
)
# メインループ
notebook.focus()
root.mainloop()
オプションの設定
タブ部の動的外観変更
import tkinter as tk
import tkinter.ttk as ttk
from tkinter import font
# トップレベルウィンドウ作成
root = tk.Tk()
font_bold = font.Font(size=10, weight="bold")
# テーマ
style = ttk.Style()
print(style.theme_names())
print(style.theme_use())
style.theme_use("clam")
print(style.theme_use())
# Syle (TNotebook)
style.configure(
"example.TNotebook",
tabposition=tk.SW,
)
# Syle (TNotebook.Tab)
style.configure(
"example.TNotebook.Tab",
font=font_bold,
background="lightyellow",
foreground="blue",
)
# Style.map (TNotebook.Tab)
style.map(
"example.TNotebook.Tab",
foreground=[
('active', 'white'),
('disabled', 'gray'),
('selected', 'blue'),
],
background=[
('active', 'orange'),
('disabled', 'black'),
('selected', 'lightgreen'),
],
)
# ttk.Notebook
notebook = ttk.Notebook(
root,
style="example.TNotebook",
)
notebook['height'] = 100
notebook.config(width=300)
notebook.pack(padx=10, pady=10, fill=tk.BOTH, expand=True)
# ttk.Frame (0~3)
frames = []
for i in range(4):
widget = ttk.Frame(
root,
relief=tk.RIDGE,
name="frame_" + str(i),
)
frames.append(widget)
notebook.add(
widget,
text="TAB " + str(i)
)
# メインループ
notebook.focus()
root.mainloop()