tkinter.(ttk.)PanedWindow【ペインドウィンドウ ウィジェット】
メモ ( 作成 例tk 例ttk ペインのサイズ 例tk 例ttk サッシの変更 例tk 例ttk ) ウィジェット オプション ペイン オプション 仮想イベント 例 メソッド 例
メモ
- ペインドウィンドウ ウィジェットの作成 〔 例 tk・ 例 ttk〕
- tkinter.PanedWindow:従来のウィジェット
- tkinter.ttk.PanedWindow:テーマ付きウィジェット
- add( )【ペイン追加】・insert( )【ペイン挿入】ttk で ウィジェット(通常Frame【フレーム】)を指定してペイン(区画)を追加
- orient【ペイン追加方向】でペインの追加方向を指定
- ペイン間のサッシ(枠)でペインのサイズ変更可能
- 入れ子可
- ペイン(区画)のサイズ 〔 例 tk・ 例 ttk〕
- 初期サイズ
tk:height【高さ】・width【幅】
ttk:weight【余白割当比】で調整 - 最小サイズtk:minsize【最小サイズ】
- サイズ自動調整: stretch【サイズ自動調整】tk ・weight【余白割当比】ttk
- サイズ変更
サッシ(枠)を手動で変更
tk:sash_place【サッシ位置設定】
ttk:sashpos【サッシ位置取得・設定】でメインループ処理中に設定
- 初期サイズ
- サッシ(枠)の変更 〔 例 tk・ 例 ttk〕
- tk:サッシ関連のウィジェット オプションを設定
- ttk:サッシ部のスタイルを設定
(スタイル名:~.Horizontal.Sash・~.Vertical.Sash)
※:orient【ペイン追加方向】に対して垂直
外部リンク
仮想イベント
- イベント設定〔 例 〕
- bind( )【イベント関連付け】で設定 〔イベント関連メソッド 〕
仮想イベント | 説明 |
---|---|
<<EnteredChild>> ttk | サッシ部分からペイン部分へのマウスポインタ移動で発生 (内部移動のみ:外部との移動は別途必要〔 例 〕) 引数 eventイベントオブジェクト マウスポインタ座標の設定なし |
オプション
メモ
- オプションの設定方法
- コンストラクタで辞書型引数 (tk のみ)・キーワード引数として指定
- オプション名を辞書インデックスとして指定 ( widget ['オプション名'] )
- config・configure【オプション設定・取得】で辞書型引数・キーワード引数として指定
- オプション関連のメソッド
- オプション関連メソッド
- Style.configure( ):Style に設定した値
- 注) 実装依存 (各種ドキュメントに相違があり)
オプション 一覧
ウィジェット オプション | |||
---|---|---|---|
個別オプション | tk | ttk | 説明 |
borderwidth (bd) | ● | 境界線の幅 | |
orient | ● | Config | ペイン追加方向 ・tk.HORIZONTAL【水平方向:左から右】(デフォルト tk ) ・tk.VERTICAL【垂直方向:上から下】(デフォルト ttk ) |
relief | ● | 外観 | |
サイズ | tk | ttk | 説明 |
height | ● | Config | 高さ (ピクセル単位 等) |
width | ● | Config | 幅 (ピクセル単位 等) |
色 関連 | tk | ttk | 説明 |
background (bg) | ● | Style (―) | 背景色 |
background (サッシ部) | Style[Sash] | サッシ部の背景色 | |
bordercolor (サッシ部) | Style[Sash] | サッシ部の境界線色 | |
lightcolor (サッシ部) | Style[Sash] | サッシ部左上の明るい色 | |
サッシハンドル 関連 | tk | ttk | 説明 |
gripcount | Style[Sash] | グリップ数 | |
handlepad | ● | Style[Sash] | サッシハンドルの上端または左端からの位置 (ピクセル単位 等) |
handlesize | ● | Style[Sash] | サッシハンドルの正方形の辺の長さ (ピクセル単位 等) |
showhandle | ● | サッシハンドルの表示有無 (True:表示 / False:非表示) | |
サッシ(枠) 関連 | tk | ttk | 説明 |
opaqueresize | ● | 即時リサイズの有無 (True:即時リサイズ / False:移動予定枠の表示後リサイズ) | |
proxybackground tk 8.5.19 | ● | 移動予定枠の背景色 | |
proxyborderwidth tk 8.5.19 | ● | 移動予定枠の境界線幅 | |
proxyrelief tk 8.5.19 | ● | 移動予定枠の外観 | |
sashcursor | ● | サッシ上のマウスカーソル名 | |
sashpad | ● | Style[Sash] | サッシの内部間隔 |
sashrelief | ● | Style[Sash] | サッシの外観 |
sashthickness | Style[Sash] | サッシの幅 | |
sashwidth | ● | サッシの幅 | |
共通 | tk | ttk | 説明 |
class_ | ○ | クラス名 | |
cursor | ● | Config | マウスカーソル名 |
name | ○ | ○ | インスタンス名 (省略:自動命名) 先頭に半角大文字は不可・ドットは不可 / フルパスで一意 〔 インスタンス識別 〕 |
style | Config | スタイル名 (TPanedwindow) (サッシ部:~.Horizontal.Sash・~.Vertical.Sash に対応) | |
takefocus | Config | [Tab]キー等でのフォーカス移動の有無〔フォーカス関連メソッド〕 ・' ' (空文字列):自動設定 ・False:なし (スキップ) ・True:あり (タブストップ) |
ペイン(区画) オプション | tk | ttk | 説明 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Method: add( )【ペイン追加】 ・insert( )【ペイン挿入】ttk 等 | |||||||||||||
after | method | 位置ウィジェット (後挿入) | |||||||||||
before | method | 位置ウィジェット (前挿入) | |||||||||||
height | method | 高さ | |||||||||||
hide | method | 非表示状態 (True:非表示 / False:表示) | |||||||||||
minsize | method | 最小サイズ | |||||||||||
padx | method | 左右パディング (内部間隔) | |||||||||||
pady | method | 上下パディング (内部間隔) | |||||||||||
sticky | method | 固定位置 | |||||||||||
stretch | method | サイズ自動調整
| |||||||||||
width | method | 幅 | |||||||||||
weight | method | 余白割当比 (正数) ※:ペインのサイズ比ではない |
凡例
●:各種方法で指定可能
○:コンストラクタでのみ指定可能
▲: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ビット |
マウスカーソル名の詳細 ( cursor )
マウスカーソル名 | 説明 |
---|---|
'マウスカーソル名' | 下記参照 ('arrow'・'wait' 等) Tcl8.6/Tk8.6 - Tk Commands - cursors (英語) Tkinter 8.5 reference: a GUI for Python - Cursors (英語) |
外観の詳細 ( relief )
外観 | 説明 |
---|---|
FLAT | フラット |
GROOVE | 凹み枠 |
RAISED | 隆起 (凸) |
RIDGE | 隆起枠 (凸枠) |
SOLID | 実線 |
SUNKEN | 凹み |
メソッド
コンストラクタ | 備考 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
PanedWindow(master=None, cnf={ }, **kw) ttk.PanedWindow(master=None, **kw) ttk.Panedwindow (master=None, **kw) | コンストラクタ master親 (tkinter.Tk【トップレベルウィンドウ】・コンテナウィジェット) cnf (辞書型引数) ウィジェット オプション kw (キーワード引数)ウィジェット オプション (複数可) | ||||||||||
固有メソッド | 備考 | ||||||||||
add(child, **kw) | ペイン追加 child追加ウィジェット (既存ウィジェット:移動) kw (キーワード引数)ペイン オプション ※:after【位置ウィジェット (後挿入)】tk ・before【位置ウィジェット (前挿入)】tk 指定で挿入 | ||||||||||
forget(child) ※:remove( )【ペイン削除】と同等 | ペイン削除 child削除ウィジェット | ||||||||||
identify(x, y) | 構成部分判定 戻り値座標位置の構成部分
yy座標 | ||||||||||
insert(pos, child, **kw) ttk | ペイン挿入 pos挿入位置 ('end':最後 / サッシ番号:0~ / ウィジェット名) child挿入ウィジェット (既存ウィジェット:移動) kw (キーワード引数)ペイン オプション | ||||||||||
pane(pane, option=None, **kw) ttk | ペイン オプションの取得・設定 戻り値 (取得:対象ペインのみ指定)辞書型の全ペイン オプション 戻り値 (個別取得:ペイン オプション名指定)指定ペイン オプションの値 戻り値 (設定:値指定)不定 pane対象ペイン (サッシ番号:0~ / 子ウィジェット / 子ウィジェット パス名) optionペイン オプション名 (個別取得) kw (キーワード引数)ペイン オプションと 値 (設定) | ||||||||||
panecget(child, option) tk | ペイン オプション取得 戻り値ペイン オプション値 child子ウィジェット / 子ウィジェット パス名 optionペイン オプション名 | ||||||||||
paneconfig(tagOrId, cnf=None, **kw) tk paneconfigure(同上) tk | ペイン オプション取得・設定 戻り値 (全取得:対象ペインのみ指定)辞書型の全ペイン オプション 戻り値 (個別取得:ペイン オプション名指定)指定ペイン オプションの詳細タプル 戻り値 (設定:値指定)不定 tagOrId対象ペイン (子ウィジェット / 子ウィジェット パス名) cnfペイン オプション名 (個別取得) kw (キーワード引数)ペイン オプション と 値 (設定) | ||||||||||
panes( ) | 子ウィジェットパス名取得 戻り値子ウィジェットパス名のタプル (左上からの順) | ||||||||||
proxy(*args) tk | 内部メソッド (proxy_~ から呼び出し) 戻り値各種戻り値 args各種引数 | ||||||||||
proxy_coord() tk | 移動予定枠の座標取得 戻り値座標のタプル | ||||||||||
proxy_forget() tk | 移動予定枠の削除 | ||||||||||
proxy_place(x, y) tk | 移動予定枠の配置 xx座標 yy座標 | ||||||||||
remove(child) ※:forget( )【ペイン削除】と同等 | ペイン削除 childペイン対象のウィジェット | ||||||||||
sash(*args) | 内部メソッド (sash_~ から呼び出し) 戻り値各種戻り値 args各種引数 | ||||||||||
sash_coord(index) tk | サッシ位置取得 戻り値サッシの左上隅座標 indexサッシ番号 (0~) | ||||||||||
sash_mark(index) tk | サッシ位置のマーク indexサッシ番号 (0~) | ||||||||||
sash_place(index, x, y) tk | サッシ位置設定 indexサッシ番号 (0~) xx座標 ( orient【ペイン追加方向】が HORIZONTAL【水平方向:左から右】のみ有効) yy座標 ( orient【ペイン追加方向】が VERTICAL【垂直方向:上から下】のみ有効) | ||||||||||
sashpos(index, newpos=None) ttk | サッシ位置取得・設定 戻り値(設定後の)サッシ位置 indexサッシ番号 (0~) newpos設定サッシ位置 (省略:取得) ※:メインループ処理中のみ有効 | ||||||||||
共通メソッド (抜粋) 〔詳細はリンク先〕 | 備考 | ||||||||||
cget( 'option' ) widget['option'] | オプション値 取得 下の構文はオプション値の設定も可 | ||||||||||
config( ~ ) configure( ~ ) | オプション 設定・取得 | ||||||||||
pack( ~ ) | 配置 (パック形式) | ||||||||||
grid( ~ ) | 配置 (グリッド形式) | ||||||||||
place( ~ ) | 配置 (座標形式) | ||||||||||
state( ~ ) ttk | 状態フラグ 取得・設定 | ||||||||||
instate( ~ ) ttk | 状態フラグ チェック |
例
作成 tk
import tkinter as tk
from tkinter import font
# トップレベルウィンドウ作成
root = tk.Tk()
root.geometry("300x160")
# ラベル フォントサイズ設定
font_label = font.Font(size=12)
root.option_add("*Label.font", font_label)
# PanedWindow [Main]
pw_main = tk.PanedWindow(root)
pw_main.pack(expand=True, fill=tk.BOTH)
# [Main] - [Pane 0]
label_0 = tk.Label(pw_main, text="Pane 0", bg="LightSalmon")
pw_main.add(label_0, width=100)
# [Main] - [Pane 1]
label_1 = tk.Label(pw_main, text="Pane 1", bg="lightgreen")
pw_main.add(label_1, width=100)
# [Main] - [PanedWindow (Right)]
pw_right = tk.PanedWindow(pw_main, orient=tk.VERTICAL)
pw_main.add(pw_right)
# [Right] - [Pane 2-0]
label_2_0 = tk.Label(pw_main, text="Pane 2-0", bg="LightSalmon")
pw_right.add(label_2_0, height=50)
# [Right] - [Pane 2-2]
label_2_2 = tk.Label(pw_main, text="Pane 2-2", bg="lightblue")
pw_right.add(label_2_2, height=50)
# [Right] - [Pane 2-1]
label_2_1 = tk.Label(pw_main, text="Pane 2-1", bg="lightgreen")
pw_right.add(label_2_1, height=50, before=label_2_2)
# メインループ
root.mainloop()
作成 ttk
import tkinter as tk
import tkinter.ttk as ttk
from tkinter import font
# トップレベルウィンドウ作成
root = tk.Tk()
root.geometry("300x150")
# ラベル フォントサイズ設定
font_label = font.Font(size=12)
root.option_add("*TLabel.font", font_label)
# スタイル設定
style = ttk.Style()
style.configure("color0.TLabel", anchor=tk.CENTER, justify=tk.CENTER, background="LightSalmon")
style.configure("color1.TLabel", anchor=tk.CENTER, justify=tk.CENTER, background="lightgreen")
style.configure("color2.TLabel", anchor=tk.CENTER, justify=tk.CENTER, background="lightblue")
# PanedWindow [Main]
pw_main = ttk.PanedWindow(root, orient=tk.HORIZONTAL)
pw_main.pack(expand=True, fill=tk.BOTH)
# [Main] - [Pane 0]
label_0 = ttk.Label(pw_main, text="ttk.PanedWindow\nPane 0", style="color0.TLabel")
pw_main.add(label_0, weight=1)
# [Main] - [Pane 1]
label_1 = ttk.Label(pw_main, text="Pane 1", style="color1.TLabel")
pw_main.add(label_1, weight=1)
# [Main] - [PanedWindow (Right)]
pw_right = ttk.PanedWindow(pw_main)
pw_main.add(pw_right, weight=1)
# [Right] - [Pane 2-0]
label_2_0 = ttk.Label(pw_main, text="Pane 2-0", style="color0.TLabel")
pw_right.add(label_2_0, weight=1)
# [Right] - [Pane 2-2]
label_2_2 = ttk.Label(pw_main, text="Pane 2-2", style="color2.TLabel")
pw_right.add(label_2_2, weight=1)
# [Right] - [Pane 2-1]
label_2_1 = ttk.Label(pw_main, text="Pane 2-1", style="color1.TLabel")
pw_right.insert(label_2_2, label_2_1, weight=1)
# メインループ
root.mainloop()
ペイン(区画)のサイズ tk
import tkinter as tk
from tkinter import font
# トップレベルウィンドウ作成
root = tk.Tk()
root.geometry("600x450")
# ラベル フォントサイズ設定
font_label = font.Font(size=12)
root.option_add("*Label.font", font_label)
# PanedWindow [main]
pw_main = tk.PanedWindow(root, orient=tk.VERTICAL, background="blue")
pw_main.pack(expand=True, fill=tk.BOTH)
# PanedWindow [Title]
pw_title = tk.PanedWindow(pw_main, height=50)
pw_main.add(pw_title, stretch="never", minsize=50)
# PanedWindow [A]
pw_a = tk.PanedWindow(pw_main, height=80)
pw_main.add(pw_a, stretch="always")
# PanedWindow [B]
pw_b = tk.PanedWindow(pw_main, height=80)
pw_main.add(pw_b, stretch="always")
# PanedWindow [C]
pw_c = tk.PanedWindow(pw_main, height=80)
pw_main.add(pw_c, stretch="always")
# PanedWindow [D]
pw_d = tk.PanedWindow(pw_main, height=80)
pw_main.add(pw_d, stretch="always")
# PanedWindow [E]
pw_e = tk.PanedWindow(pw_main, height=80)
pw_main.add(pw_e, stretch="always")
# [Title] - [label]
label_0 = tk.Label(pw_title, text="PanedWindow", bg="lightyellow")
pw_title.add(label_0, width=100, stretch="always")
# [A] - [Pane 0]
label_a_0 = tk.Label(pw_a, text="Pane 0\n\nstretch='always'", bg="LightSalmon")
pw_a.add(label_a_0, width=100, stretch="always")
# [A] - [Pane 1]
label_a_1 = tk.Label(pw_a, text="Pane 1\n\nstretch='always'", bg="lightgreen")
pw_a.add(label_a_1, width=100, stretch="always")
# [A] - [Pane 2]
label_a_2 = tk.Label(pw_a, text="Pane 2\n\nstretch='always'", bg="lightblue")
pw_a.add(label_a_2, width=100, stretch="always")
# [B] - [Pane 0]
label_b_0 = tk.Label(pw_b, text="Pane 0\n\nstretch='first'", bg="LightSalmon")
pw_b.add(label_b_0, width=100, stretch="first")
# [B] - [Pane 1]
label_b_1 = tk.Label(pw_b, text="Pane 1\n\nstretch='first'", bg="lightgreen")
pw_b.add(label_b_1, width=100, stretch="first")
# [B] - [Pane 2]
label_b_2 = tk.Label(pw_b, text="Pane 2\n\nstretch='first'", bg="lightblue")
pw_b.add(label_b_2, width=100, stretch="first")
# [C] - [Pane 0]
label_c_0 = tk.Label(pw_c, text="Pane 0\n\nstretch='last'", bg="LightSalmon")
pw_c.add(label_c_0, width=100, stretch="last")
# [C] - [Pane 1]
label_c_1 = tk.Label(pw_c, text="Pane 1\n\nstretch='last'", bg="lightgreen")
pw_c.add(label_c_1, width=100, stretch="last")
# [C] - [Pane 2]
label_c_2 = tk.Label(pw_c, text="Pane 2\n\nstretch='last'", bg="lightblue")
pw_c.add(label_c_2, width=100, stretch="last")
# [D] - [Pane 0]
label_d_0 = tk.Label(pw_d, text="Pane 0\n\nstretch='middle'", bg="LightSalmon")
pw_d.add(label_d_0, width=100, stretch="middle")
# [D] - [Pane 1]
label_d_1 = tk.Label(pw_d, text="Pane 1\n\nstretch='middle'", bg="lightgreen")
pw_d.add(label_d_1, width=100, stretch="middle")
# [D] - [Pane 2]
label_d_2 = tk.Label(pw_d, text="Pane 2\n\nstretch='middle'", bg="lightblue")
pw_d.add(label_d_2, width=100, stretch="middle")
# [E] - [Pane 0]
label_e_0 = tk.Label(pw_e, text="Pane 0\n\nstretch='never'", bg="LightSalmon")
pw_e.add(label_e_0, width=100, stretch="never")
# [E] - [Pane 1]
label_e_1 = tk.Label(pw_e, text="Pane 1\n\nstretch='never'", bg="lightgreen")
pw_e.add(label_e_1, width=100, stretch="never")
# [E] - [Pane 2]
label_e_2 = tk.Label(pw_e, text="Pane 2\n\nstretch='never'", bg="lightblue")
pw_e.add(label_e_2, width=100, stretch="never")
# メインループ
root.mainloop()
ペイン(区画)のサイズ ttk
import tkinter as tk
import tkinter.ttk as ttk
from tkinter import font
def resize():
pw_d.sashpos(0, 100)
pw_d.sashpos(1, 300)
# トップレベルウィンドウ作成
root = tk.Tk()
root.geometry("600x450")
# ラベル フォントサイズ設定
font_wiget = font.Font(size=12)
root.option_add("*TLabel.font", font_wiget)
# スタイル設定
style = ttk.Style()
style.configure(
"example.TPanedwindow",
background="blue",
)
style.configure("colorT.TLabel", anchor=tk.CENTER, justify=tk.CENTER, background="lightyellow")
style.configure("color0.TLabel", anchor=tk.CENTER, justify=tk.CENTER, background="LightSalmon")
style.configure("color1.TLabel", anchor=tk.CENTER, justify=tk.CENTER, background="lightgreen")
style.configure("color2.TLabel", anchor=tk.CENTER, justify=tk.CENTER, background="lightblue")
# PanedWindow [main]
pw_main = ttk.PanedWindow(root, style="example.TPanedwindow")
pw_main.pack(expand=True, fill=tk.BOTH)
# PanedWindow [Title]
pw_title = ttk.PanedWindow(pw_main, height=50, orient=tk.HORIZONTAL)
pw_main.add(pw_title, weight=1)
# PanedWindow [A]
pw_a = ttk.PanedWindow(pw_main, height=50, orient=tk.HORIZONTAL)
pw_main.add(pw_a, weight=2)
# PanedWindow [B]
pw_b = ttk.PanedWindow(pw_main, height=50, orient=tk.HORIZONTAL)
pw_main.add(pw_b, weight=2)
# PanedWindow [C]
pw_c = ttk.PanedWindow(pw_main, height=50, orient=tk.HORIZONTAL)
pw_main.add(pw_c, weight=2)
# PanedWindow [D]
pw_d = ttk.PanedWindow(pw_main, height=50, orient=tk.HORIZONTAL)
pw_main.add(pw_d, weight=2)
# [Title] - [label]
label_0 = ttk.Label(pw_title, text="ttk.PanedWindow", style="colorT.TLabel")
pw_title.add(label_0, weight=1)
# [A] - [Pane 0]
label_a_0 = ttk.Label(pw_a, text="Pane 0\n\nweight=1", style="color0.TLabel")
pw_a.add(label_a_0, weight=1)
# [A] - [Pane 1]
label_a_1 = ttk.Label(pw_a, text="Pane 1\n\nweight=1", style="color1.TLabel")
pw_a.add(label_a_1, weight=1)
# [A] - [Pane 2]
label_a_2 = ttk.Label(pw_a, text="Pane 2\n\nweight=1", style="color2.TLabel")
pw_a.add(label_a_2, weight=1)
# [B] - [Pane 0]
label_b_0 = ttk.Label(pw_b, text="Pane 0\n\nweight=1", style="color0.TLabel")
pw_b.add(label_b_0, weight=1)
# [B] - [Pane 1]
label_b_1 = ttk.Label(pw_b, text="Pane 1\n\nweight=2", style="color1.TLabel")
pw_b.add(label_b_1, weight=2)
# [B] - [Pane 2]
label_b_2 = ttk.Label(pw_b, text="Pane 2\n\nweight=3", style="color2.TLabel")
pw_b.add(label_b_2, weight=3)
# [C] - [Pane 0]
label_c_0 = ttk.Label(pw_c, text="Pane 0\n\nweight=3", style="color0.TLabel")
pw_c.add(label_c_0, weight=3)
# [C] - [Pane 1]
label_c_1 = ttk.Label(pw_c, text="Pane 1\n\nweight=2", style="color1.TLabel")
pw_c.add(label_c_1, weight=2)
# [C] - [Pane 2]
label_c_2 = ttk.Label(pw_c, text="Pane 2\n\nweight=1", style="color2.TLabel")
pw_c.add(label_c_2, weight=1)
# [D] - [Pane 0]
label_d_0 = ttk.Label(pw_d, text="Pane 0\nloooooooooooooooooooong", style="color0.TLabel")
pw_d.add(label_d_0, weight=1)
# [D] - [Pane 1]
label_d_1 = ttk.Label(pw_d, text="Pane 1", style="color1.TLabel")
pw_d.add(label_d_1, weight=1)
# [D] - [Pane 2]
label_d_2 = ttk.Label(pw_d, text="Pane 2", style="color2.TLabel")
pw_d.add(label_d_2, weight=1)
# [Resize]
style.configure("example.TButton", font=font_wiget, background="blue")
button_resize = ttk.Button(root, text="Button\n(Resize)", command=resize, padding=20, style="example.TButton")
button_resize.pack(fill=tk.BOTH)
# メインループ
root.mainloop()
サッシ(枠)の変更 tk
import tkinter as tk
from tkinter import font
# トップレベルウィンドウ作成
root = tk.Tk()
root.geometry("340x100")
# ラベル フォントサイズ設定
font_label = font.Font(size=12)
root.option_add("*Label.font", font_label)
# PanedWindow [Main]
pw_main = tk.PanedWindow(
root,
# ハンドル 関連
showhandle=True,
# サッシ(枠) 関連
opaqueresize=False,
proxybackground="blue",
proxyborderwidth=5,
proxyrelief=tk.SUNKEN,
sashcursor="cross",
sashpad=5,
sashrelief=tk.RAISED,
sashwidth=10,
)
pw_main.pack(expand=True, fill=tk.BOTH)
# [Main] - [Pane 0]
label_0 = tk.Label(pw_main, text="Pane 0", bg="LightSalmon")
pw_main.add(label_0, width=100)
# [Main] - [Pane 1]
label_1 = tk.Label(pw_main, text="Pane 1", bg="lightgreen")
pw_main.add(label_1, width=100)
# [Main] - [Pane 2]
label_2 = tk.Label(pw_main, text="Pane 2", bg="lightblue")
pw_main.add(label_2, width=100)
# メインループ
root.mainloop()
サッシ(枠)の変更 ttk
import tkinter as tk
import tkinter.ttk as ttk
from tkinter import font
# トップレベルウィンドウ作成
root = tk.Tk()
root.geometry("340x100")
# ラベル フォントサイズ設定
font_label = font.Font(size=12)
root.option_add("*TLabel.font", font_label)
# PanedWindow [Main]
style = ttk.Style()
print(style.theme_names())
# 出力例:('winnative', 'clam', 'alt', 'default', 'classic', 'vista', 'xpnative')
style.theme_use("classic")
style.configure(
"example.TPanedwindow",
background="blue",
)
style.configure(
"example.TPanedwindow.Vertical.Sash",
background="cyan",
handlepad=30,
handlesize=10,
sashpad=5,
sashthickness=20,
)
pw_main = ttk.PanedWindow(
root,
orient=tk.HORIZONTAL,
style="example.TPanedwindow",
)
pw_main.pack(expand=True, fill=tk.BOTH)
# スタイル設定
style.configure("color0.TLabel", anchor=tk.CENTER, justify=tk.CENTER, background="LightSalmon")
style.configure("color1.TLabel", anchor=tk.CENTER, justify=tk.CENTER, background="lightgreen")
style.configure("color2.TLabel", anchor=tk.CENTER, justify=tk.CENTER, background="lightblue")
# [Main] - [Pane 0]
label_0 = ttk.Label(pw_main, text="ttk.PanedWindow\nPane 0", style="color0.TLabel")
pw_main.add(label_0, weight=1)
# [Main] - [Pane 1]
label_1 = ttk.Label(pw_main, text="Pane 1", style="color1.TLabel")
pw_main.add(label_1, weight=1)
# [Main] - [Pane 2]
label_2 = ttk.Label(pw_main, text="Pane 2", style="color2.TLabel")
pw_main.add(label_2, weight=1)
# メインループ
root.mainloop()
仮想イベント
import tkinter as tk
import tkinter.ttk as ttk
from tkinter import font
# <<EnteredChild>>
def entered_child_event(event):
change_pane()
# ペイン変更
def change_pane():
mouse_x = pw_main.winfo_pointerx() - pw_main.winfo_rootx()
count = len(pw_main.panes())
index = count - 1
for i in range(count - 1):
sash_x = pw_main.sashpos(i)
if mouse_x < sash_x:
index = i
break
for i in range(len(list_label)):
if i == index:
list_label[i]['relief'] = tk.RAISED
else:
list_label[i]['relief'] = tk.FLAT
# <Enter>
def enter_event(event):
if pw_main.identify(event.x, event.y) == "":
change_pane()
# <Leave>
def leave_event(event):
for label in list_label:
label['relief'] = tk.FLAT
# トップレベルウィンドウ作成
root = tk.Tk()
root.geometry("470x100")
# ラベル フォントサイズ設定
font_label = font.Font(size=12)
root.option_add("*Label.font", font_label)
# PanedWindow [Main]
style = ttk.Style()
style.configure(
"example.TPanedwindow",
background="blue",
)
style.configure(
"example.TPanedwindow.Vertical.Sash",
sashthickness=10,
)
pw_main = ttk.PanedWindow(
root,
style="example.TPanedwindow",
orient=tk.HORIZONTAL,
)
pw_main.pack(expand=True, fill=tk.BOTH)
# [Main] - [Pane 0]
label_0 = tk.Label(pw_main, text="ttk.PanedWindow\nPane 0", bg="LightSalmon", bd=10)
pw_main.add(label_0, weight=1)
# [Main] - [Pane 1]
label_1 = tk.Label(pw_main, text="Pane 1", bg="lightgreen", bd=10)
pw_main.add(label_1, weight=3)
# [Main] - [Pane 2]
label_2 = tk.Label(pw_main, text="Pane 2", bg="lightblue", bd=10)
pw_main.add(label_2, weight=3)
# イベント設定
list_label = [label_0, label_1, label_2]
pw_main.bind("<<EnteredChild>>", entered_child_event)
pw_main.bind("<Enter>", enter_event)
pw_main.bind("<Leave>", leave_event)
# メインループ
root.mainloop()