tkinter.(ttk.)Button【ボタン ウィジェット】
メモ ( 作成 例 押下処理 例 テキスト 有効化・無効化 例 デフォルトボタン・ショートカットキー 例 ) オプション メソッド 例
メモ
- ボタン ウィジェットの作成〔 例 〕
- tkinter.Button:従来のウィジェット
- tkinter.ttk.Button:テーマ付きウィジェット
- 押下処理〔 例 〕
- command【ボタン押下処理関数】に引数なしの関数を指定
- 複数ボタンを同一関数で処理:lambda【ラムダ式】を使用して、 各ボタンから固有引数で関数(引数あり)を呼び出し
- テキスト
- 変更なし:text【テキスト文字列】に指定
- 変更あり:textvariable【ウィジェット変数】にテキスト用のウィジェット変数を指定 (上記の書き換えも可能)
- 複数行:改行 ('\n') を使用
- 有効化・無効化〔 例 〕
- state【状態】を NORMAL【通常状態】または DISABLED【無効状態】に設定
- (stateflags)【状態フラグ】ttk の 'disabled'【無効状態】を ON/OFF (上記とどちらかを使用)
- デフォルトボタン・ショートカットキー〔 例 〕
- デフォルトボタン外観:default【デフォルトボタン指定】を ACTIVE【デフォルトボタン】に設定
- ショートカットキー外観:underline【下線の文字位置】をショートカットキーの文字位置に設定
- 実装:bind【イベント関連付け】でキーを割り当て
(フォーカスがなくても動作するように、対象はトップレベルウィンドウ等)
外部リンク
オプション
メモ
- オプションの設定方法
- コンストラクタで辞書型引数 (tk のみ)・キーワード引数として指定
- オプション名を辞書インデックスとして指定 ( widget ['オプション名'] )
- config・configure【オプション設定・取得】で辞書型引数・キーワード引数として指定
- オプション関連のメソッド
- オプション関連メソッド
- Style.configure( ):Style に設定した値
- 注) 実装依存 (各種ドキュメントに相違があり)
オプション 一覧
個別 | tk | ttk | 説明 |
---|---|---|---|
command | ● | Config | ボタン押下処理関数 (引数なし)〔ボタンの押下処理〕 |
default | ● | Config | デフォルトボタンの指定 (外観のみ:処理は別途必要)〔 例 〕 ・NORMAL【通常ボタン】:通常の外観 ・ACTIVE【デフォルトボタン】:外観変更 (外枠が強調等) ・DISABLED【無効ボタン】:通常の外観 |
overrelief | ● | マウスカーソルが上にあるときの外観〔外観の詳細〕 | |
shiftrelief | Style | ボタン押下でテキスト等が右下に移動する距離 (高さは自動的に調整) | |
state | ● | Config | 状態 (tk 互換用 ttk:(stateflags)【状態フラグ】を上書き) ・NORMAL【通常状態】 ・DISABLED【無効状態】:押下不可 |
(stateflags) | state( ) 〔詳細〕 | 状態フラグ (組合せ:state【状態】の変更なし) ・(なし):通常状態 ・'active':アクティブ状態 ・'disabled':無効状態 ・'pressed':押下状態 ・'readonly':読み込み専用状態 | |
テキスト・画像 | tk | ttk | 説明 |
font | ● | Style | フォント (tkinter.Font) |
text | ● | Config | テキスト文字列 ( textvariable【テキスト用】ウィジェット変数を優先 ) |
textvariable | ● | Config | テキスト用 ウィジェット変数 ( text【テキスト文字列】より優先 ) |
compound | ● | Config | テキストと画像の合成 ( テキスト対しての画像位置 ) |
bitmap | ● | ビットマップ画像 ( image【画像】を優先 ) | |
image | ● | ● | 画像 ( bitmap【ビットマップ画像】 より優先 ) |
サイズ・配置 | tk | ttk | 説明 |
height | ● | ※ | 高さ (省略:自動計算) 文字のみ:行数 画像あり:ピクセル数 ※:padding【内部間隔のリスト】の上下間隔で調整可能 |
width | ● | ● | 幅 (省略・0:自動計算 / 負:最小幅) 文字のみ:文字数 画像あり:ピクセル数 |
anchor | ● | Style | テキスト等の配置位置 (デフォルト:CENTER【中央】) |
justify | ● | Style | 複数行テキストの揃え ・LEFT【左端揃え】(デフォルト ttk ) ・CENTER【中央揃え】(デフォルト tk ) ・RIGHT【右端揃え】 |
padding | ● | 内部間隔のリスト (左端・上端・右端・下端の順) | |
padx | ● | x方向の内部間隔 (ピクセル単位 等) | |
pady | ● | y方向の内部間隔 (ピクセル単位 等) | |
wraplength | ● | ワードラップの幅 (スクリーン座標系単位) (0以下:折り返しなし) | |
色 関連 | tk | ttk | 説明 |
background (bg) | ● | Style (―) | 背景色 |
foreground (fg) | ● | Style (―) | 前景色 |
bordercolor | Style | 境界線の色 | |
borderwidth (bd) | ● | Style | 境界線の幅 |
activebackground | ※ | Style.map() [background] | アクティブ状態の背景色 (※:環境によりボタン押下時) |
activeforeground | ※ | Style.map() [foreground] | アクティブ状態の前景色 (※:環境によりボタン押下時) |
(disabledbackground) | Style.map() [background] | 無効状態の背景色 | |
disabledforeground | ● | Style.map() [foreground] | 無効状態の前景色 |
highlightbackground | ● | Style | 外枠の色 (入力フォーカスなし) |
highlightcolor | ● | Style | 外枠の色 (入力フォーカスあり) |
highlightthickness | ● | Style | 外枠の幅 (入力フォーカス用) |
darkcolor | Style | 右下の暗い色 | |
lightcolor | Style | 左上の明るい色 | |
共通 | tk | ttk | 説明 |
class_ | ○ | クラス名 | |
cursor | ● | Config | マウスカーソル名 |
name | ○ | ○ | インスタンス名 (省略:自動命名) 先頭は小文字・ドットは不可 / フルパスで一意 〔 インスタンス識別 〕 |
relief | ● | 外観 | |
repeatdelay | ● | オートリピート開始までの時間 (ミリ秒数) | |
repeatinterval | ● | オートリピートの間隔 (ミリ秒数) | |
style | Config | スタイル名 (TButton) | |
takefocus | ● | Config | [Tab]キー等でのフォーカス移動の有無〔フォーカス〕 ・'' (空文字列):自動設定 ・False:なし (スキップ) ・True:あり (タブストップ) |
underline | ● | Config | 下線の文字位置 (0~) (ショートカットキー用:実装は別途必要)〔 例 〕 |
凡例
●:各種方法で指定可能
○:コンストラクタでのみ指定可能
▲:config( ) 等でのみ指定可能
Config:コンストラクタ 及び config( ) 等で指定可能
Style:Style でのみ指定可能
Method:メソッドの引数で指定
Default:デフォルト値
:テーマ依存
○:コンストラクタでのみ指定可能
▲:config( ) 等でのみ指定可能
Config:コンストラクタ 及び config( ) 等で指定可能
Style:Style でのみ指定可能
Method:メソッドの引数で指定
Default:デフォルト値
:テーマ依存
style.map (スタイル名, 対象 = [(状態, 状態の値)])
対象 | 状態 | オプション | 備考 |
---|---|---|---|
background 【背景色】 | active【アクティブ状態】 | activebackground | |
disabled【無効状態】 | (disabledbackground) | ||
pressed【押下状態】 | (●) | active【アクティブ状態】より前に定義 | |
readonly【読み取り専用状態】 | |||
foreground 【前景色】 | active【アクティブ状態】 | activeforeground | |
disabled【無効状態】 | disabledforeground | ||
pressed【押下状態】 | (●) | active【アクティブ状態】より前に定義 | |
readonly【読み取り専用状態】 |
色 | 説明 |
---|---|
'色名' | 色名:'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ビット |
配置位置の詳細 ( anchor )
配置位置 | 説明 |
---|---|
'配置位置' | 東西南北 (news) を使用した8方向 と 中央の文字列 下記参照 |
'nw' NW | 'n' N | 'ne' NE |
'w' W | 'center' CENTER | 'e' E |
'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' ttk | テキストのみ表示 |
'image' ttk | 画像のみ表示 |
NONE | テキストの代わりに画像表示 |
BOTTOM | 画像をテキストの下側に表示 |
TOP | 画像をテキストの上側に表示 |
LEFT | 画像をテキストの左側に表示 |
RIGHT | 画像をテキストの右側に表示 |
CENTER | 画像をテキストの上に表示 |
ビットマップ画像の詳細 ( bitmap )
指定値 | 説明 |
---|---|
@ファイル名 | 標準X11形式 ビットマップ ファイル名 |
組み込み画像名 | 下記参照 ('error'・'hourglass'・'info'・'question'・'warning' 等) Tcl8.6/Tk8.6 - Tk C API - GetBitmap (英語) Tkinter 8.5 reference: a GUI for Python - Bitmaps (英語) |
内部間隔リストの詳細 ( padding )
指定値 | 説明 |
---|---|
[内部間隔 (左), 内部間隔 (上), 内部間隔 (右), 内部間隔 (下)] | 内部間隔の指定 (左から時計回り) |
[内部間隔 (左), 内部間隔 (上・下), 内部間隔 (右)] | |
[内部間隔 (左・右), 内部間隔 (上・下)] | |
内部間隔 (上・下・左・右) |
外観の詳細 ( relief )
外観 | 説明 |
---|---|
FLAT | フラット |
GROOVE | 凹み枠 |
RAISED | 隆起 (凸) |
RIDGE | 隆起枠 (凸枠) |
SOLID | 実線 |
SUNKEN | 凹み |
メソッド
コンストラクタ | 備考 |
---|---|
Button(master=None, cnf={ }, **kw) ttk.Button(master=None, **kw) | コンストラクタ master親 (tkinter.Tk【トップレベルウィンドウ】・コンテナウィジェット) cnf (辞書型引数)辞書型のオプション kw (キーワード引数)オプション (複数可) |
固有メソッド | 備考 |
flash() tk | 点滅 ('disabled'【無効状態】では無視) (一部の環境でサポート) |
invoke() | ボタン押下処理実行 ('disabled'【無効状態】では無視) (command【ボタン押下処理関数】を実行) |
共通メソッド (抜粋) 〔詳細はリンク先〕 | 備考 |
cget( 'option' ) widget['option'] | オプション値 取得 下の構文はオプション値の設定も可 |
config( ~ ) configure( ~ ) | オプション 設定・取得 |
pack( ~ ) | 配置 (パック形式) |
grid( ~ ) | 配置 (グリッド形式) |
place( ~ ) | 配置 (座標形式) |
state( ~ ) ttk | 状態フラグ 取得・設定 |
instate( ~ ) ttk | 状態フラグ チェック |
例
作成
押下処理
import tkinter as tk
import tkinter.ttk as ttk
from tkinter import font
def func_a():
var_msg.set("Button (A)")
def func_b():
var_msg.set("Button (B)")
def func_common(msg):
var_msg.set(msg)
# トップレベルウィンドウ作成
root = tk.Tk()
# フォント
font_std = font.Font(size=10)
# Label
var_msg = tk.StringVar(value="var_msg")
label = ttk.Label(
root,
font=font_std,
textvariable=var_msg,
relief=tk.SUNKEN,
)
label.pack(side=tk.BOTTOM, fill=tk.X)
# tk.Button (A)
button_a = tk.Button(
root,
command=func_a,
font=font_std,
text="Button (A)",
width=10,
)
button_a.pack(padx=5, pady=5)
# tk.Button (B)
button_b = tk.Button(
root,
command=func_b,
font=font_std,
text="Button (B)",
width=10,
)
button_b.pack(padx=5, pady=5)
# Style
style = ttk.Style()
style.configure(
"example.TButton",
font=font_std,
width=12,
)
# ttk.Button (C)
button_c_ttk = ttk.Button(
root,
style="example.TButton",
command=lambda: func_common("Button (C)"),
text="ttk.Button (C)",
)
button_c_ttk.pack(padx=5, pady=5)
# ttk.Button (D)
button_d_ttk = ttk.Button(
root,
style="example.TButton",
command=lambda: func_common("Button (D)"),
text="ttk.Button (D)",
)
button_d_ttk.pack(padx=5, pady=5)
# メインループ
root.mainloop()
有効化・無効化
import tkinter as tk
import tkinter.ttk as ttk
def enable():
button_state['state'] = tk.NORMAL
button_state_ttk['state'] = tk.NORMAL
button_stateflags_ttk.state(['!disabled'])
def disable():
button_state['state'] = tk.DISABLED
button_state_ttk['state'] = tk.DISABLED
button_stateflags_ttk.state(['disabled'])
# トップレベルウィンドウ作成
root = tk.Tk()
# tk.Button (state)
button_state = tk.Button(
root,
text="Button\n(state)",
width=15,
)
button_state.grid(row=0, column=0, padx=5, pady=5)
# ttk.Button (state)
button_state_ttk = ttk.Button(
root,
text="ttk.Button\n(state)",
width=15,
)
button_state_ttk.grid(row=0, column=1, padx=5, pady=5)
# ttk.Button (stateflags)
button_stateflags_ttk = ttk.Button(
root,
text="ttk.Button\n(stateflags)",
width=15,
)
button_stateflags_ttk.grid(row=0, column=2, padx=5, pady=5)
# ttk.Button (Enable)
button_enable_ttk = ttk.Button(
root,
command=enable,
text="Enable",
)
button_enable_ttk.grid(row=1, column=0, padx=5, pady=5)
# ttk.Button (Disable)
button_disable_ttk = ttk.Button(
root,
command=disable,
text="Disable",
)
button_disable_ttk.grid(row=1, column=1, padx=5, pady=5)
# メインループ
disable()
root.mainloop()
デフォルトボタン (default) ・ショートカットキー (underline)
実際はあり得ないが、外観比較の為デフォルトボタンを2つ作成
import tkinter as tk
import tkinter.ttk as ttk
def func_a(event=None):
var_msg.set("Button (a)")
def func_b(event=None):
var_msg.set("Button (b)")
def func_c(event=None):
var_msg.set("Button (c)")
def func_d(event=None):
var_msg.set("Button (d)")
# トップレベルウィンドウ作成
root = tk.Tk()
# Button
button = tk.Button(
root,
command=func_a,
text="(a) Button (normal)",
width=17,
underline=1,
)
button.pack(padx=5, pady=5)
# Button (default)
button_default = tk.Button(
root,
command=func_b,
default=tk.ACTIVE,
text="(b) Button (default)",
width=17,
underline=1,
)
button_default.pack(padx=5, pady=5)
# ttk.Button
button_ttk = ttk.Button(
root,
command=func_c,
text="(c) ttk.Button (normal)",
width=20,
underline=1,
)
button_ttk.pack(padx=5, pady=5)
# ttk.Button (default)
button_default_ttk = ttk.Button(
root,
command=func_d,
default=tk.ACTIVE,
text="(d) ttk.Button (default)",
width=20,
underline=1,
)
button_default_ttk.pack(padx=5, pady=5)
# Label
var_msg = tk.StringVar(value="var_msg")
label = ttk.Label(
root,
textvariable=var_msg,
relief=tk.SUNKEN,
)
label.pack(side=tk.BOTTOM, fill=tk.X)
# Key
root.bind("<Return>", func_b)
#root.bind("<Return>", func_d)
root.bind("<Alt-a>", func_a)
root.bind("<Alt-b>", func_b)
root.bind("<Alt-c>", func_c)
root.bind("<Alt-d>", func_d)
# メインループ
root.mainloop()