tkinter.(ttk.)Button【ボタン ウィジェット】

メモ  (  作成 押下処理 テキスト 有効化・無効化 デフォルトボタン・ショートカットキー  )  オプション メソッド

メモ

Buttonのサンプル画像


オプション

メモ

オプション 一覧

個別tkttk説明
commandConfig ボタン押下処理関数 (引数なし)〔ボタンの押下処理
defaultConfig デフォルトボタンの指定 (外観のみ:処理は別途必要)〔
NORMAL【通常ボタン】:通常の外観
ACTIVE【デフォルトボタン】:外観変更 (外枠が強調等)
DISABLED【無効ボタン】:通常の外観
overreliefマウスカーソルが上にあるときの外観〔外観の詳細
shiftreliefStyle ボタン押下でテキスト等が右下に移動する距離
(高さは自動的に調整)
stateConfig 状態 (tk 互換用 ttk(stateflags)【状態フラグ】を上書き)
NORMAL【通常状態】
DISABLED【無効状態】:押下不可
(stateflags)state( )
詳細
状態フラグ (組合せ:state【状態】の変更なし)
(なし):通常状態
・'active':アクティブ状態
・'disabled':無効状態
・'pressed':押下状態
・'readonly':読み込み専用状態
テキスト・画像tkttk説明
fontStyleフォント (tkinter.Font)
textConfig テキスト文字列 ( textvariable【テキスト用】ウィジェット変数を優先 )
textvariableConfig テキスト用 ウィジェット変数 ( text【テキスト文字列】より優先 )
compoundConfigテキストと画像の合成 ( テキスト対しての画像位置 )
bitmapビットマップ画像 ( image【画像】を優先 )
image画像 ( bitmap【ビットマップ画像】 より優先 )
サイズ・配置tkttk説明
height高さ (省略:自動計算)
文字のみ:行数
画像あり:ピクセル数
※:padding【内部間隔のリスト】の上下間隔で調整可能
width幅 (省略・0:自動計算 / 負:最小幅)
文字のみ:文字数
画像あり:ピクセル数
anchorStyle テキスト等の配置位置 (デフォルト:CENTER【中央】)
justifyStyle 複数行テキストの揃え
LEFT【左端揃え】(デフォルト ttk )
CENTER【中央揃え】(デフォルト tk )
RIGHT【右端揃え】
padding内部間隔のリスト
(左端・上端・右端・下端の順)
padxx方向の内部間隔 (ピクセル単位 等)
padyy方向の内部間隔 (ピクセル単位 等)
wraplengthワードラップの幅 (スクリーン座標系単位)
(0以下:折り返しなし)
色 関連tkttk説明
background (bg)Style (―) 背景色
foreground (fg)Style (―)前景色
bordercolorStyle 境界線の色
borderwidth (bd)Style 境界線の幅
activebackgroundStyle.map()
[background]
アクティブ状態の背景色
(※:環境によりボタン押下時)
activeforegroundStyle.map()
[foreground]
アクティブ状態の前景色
(※:環境によりボタン押下時)
(disabledbackground) Style.map()
[background]
無効状態の背景色
disabledforegroundStyle.map()
[foreground]
無効状態の前景色
highlightbackgroundStyle 外枠の (入力フォーカスなし)
highlightcolorStyle 外枠の (入力フォーカスあり)
highlightthicknessStyle 外枠の幅 (入力フォーカス用)
darkcolorStyle 右下の暗い色
lightcolorStyle 左上の明るい色
共通tkttk説明
class_クラス名
cursorConfigマウスカーソル名
nameインスタンス名 (省略:自動命名)
先頭は小文字・ドットは不可 / フルパスで一意
インスタンス識別
relief外観
repeatdelayオートリピート開始までの時間 (ミリ秒数)
repeatintervalオートリピートの間隔 (ミリ秒数)
styleConfigスタイル名 (TButton)
takefocusConfig[Tab]キー等でのフォーカス移動の有無〔フォーカス
'' (空文字列):自動設定
False:なし (スキップ)
True:あり (タブストップ)
underlineConfig 下線の文字位置 (0~)
(ショートカットキー用:実装は別途必要)〔
凡例
●:各種方法で指定可能
○:コンストラクタでのみ指定可能
▲: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()

Buttonのサンプル画像


有効化・無効化

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()

Buttonのサンプル画像


デフォルトボタン (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()

Buttonのサンプル画像