Tkinter Button
ttk.Button ウィジェットとは?
ttk.Button ウィジェットはテーマ付きのボタンウィジェットです。
ttk.Button ウィジェットではボタンのラベルとなる文字だけではなく、画像も表示することができます。
ttk.Button ウィジェットのオプション
ttk.Button ウィジェットの標準オプション
ttk.Button ウィジェットでは次の標準オプションが利用できます。
- class
- compound
- cursor
- image
- state
- style
- takefocus
- text
- textvariable
- underline
- width
ttk.Button ウィジェットの command オプション
ttk.Button ウィジェットの command オプションには、ボタンをクリックした時に実行する関数 (callable) を設定します。
from tkinter import *
from tkinter import ttk
root = Tk()
root.title('Button Example')
# Frame as Widget Container
frame1 = ttk.Frame(
root,
padding=10)
frame1.grid()
# Label 1
icon = PhotoImage(file='pencil.png')
label1 = ttk.Label(
frame1,
image=icon)
label1.grid(row=0, column=0)
# Label 2
label2 = ttk.Label(
frame1,
text='Will schools be open this fall?',
width=20,
anchor=W,
padding=(20))
label2.grid(row=0, column=1)
# ボタン
button1 = ttk.Button(
frame1,
text='OK',
command=lambda: root.quit())
button1.grid(row=1, column=0, columnspan=2)
root.mainloop()
OK ボタンを押すと、ボタンの commandオプションに設定した関数が呼ばれます。ここではラムダ式を使って root.quit() が設定されています。これを呼ぶことによりプログラムが終了します。
ttk.Button ウィジェットの default オプション
ttk.Button ウィジェットの default オプションには、ボタンの既定の状態を設定できます。有効な値は normal, active, disabled です。
ttk.Button ウィジェットのスタイル
ttk.Button のスタイルクラス名は TButton です。
TButton では次のオプションが指定できます。
- anchor
- background : 背景色の設定
- bordercolor : 枠線色の設定
- compound : 画像と文字の表示位置の設定
- darkcolor
- foreground : 文字色の設定
- font : 文字のフォントの設定
- highlightcolor
- highlightthickness
- lightcolor
- padding
- relief
- shiftrelief
ttk.Button ウィジェットのボタンを無効にする
ボタンが押下された状態とか、無効の状態はプログラムから制御できます。
ここでは 2 番目のボタンが無効化 されています。これをするには、 state メソッドに disabled を渡します。
from tkinter import *
from tkinter import ttk
root = Tk()
root.title('Button Example')
style = ttk.Style()
style.theme_use('classic')
frame1 = ttk.Frame(root, padding=5)
frame1.grid()
button1 = ttk.Button(frame1, text='A')
button1.grid(row=0, column=0)
button2 = ttk.Button(frame1, text='B')
button2.state(['disabled'])
button2.grid(row=0, column=1)
root.mainloop()
尚、ここでは classic テーマを設定していますが、必須ではありません。 テーマを変更した理由は Mac の環境のデフォルトの aqua テーマでは、無効の状態であることがややわかりにくかったため、無効の状態がわかりやすい classic テーマを設定しました。
ttk.Button ウィジェットのボタンを押下したままの状態にする
ボタンを押した状態のままにするには、以下のコードのように state メソッドに pressed もしくは !pressed を渡します。
from tkinter import *
from tkinter import ttk
# ボタン 1
def dvd_clicked():
button1.state(['pressed'])
button2.state(['!pressed'])
s.set("DVD clicked.")
# ボタン 2
def download_clicked():
button1.state(['!pressed'])
button2.state(['pressed'])
s.set("Download clicked.")
root = Tk()
root.title('Button Example')
# Frame as Widget Container
frame1 = ttk.Frame(
root,
padding=(5))
frame1.grid()
icon1 = PhotoImage(file='disk.png')
button1 = ttk.Button(
frame1,
image=icon1,
text='DVD',
compound=TOP,
padding=(10),
command=dvd_clicked)
button1.grid(row=0, column=0)
icon2 = PhotoImage(file='download.png')
button2 = ttk.Button(
frame1,
image=icon2,
text='Download',
compound=TOP,
padding=(10),
command=download_clicked)
button2.grid(row=0, column=1)
# ラベル
s = StringVar()
label1 = ttk.Label(
frame1,
textvariable=s)
label1.grid(row=1, column=0, columnspan=2)
root.mainloop()
尚、ここではついでに、 Label の textvariable オプションに変数を渡すことで、 ボタンを押したときにラベルの文字を切り替えています。