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) を設定します。

Tkinter Window

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 ウィジェットのボタンを無効にする

ボタンが押下された状態とか、無効の状態はプログラムから制御できます。

tkinter の 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 を渡します。

tkinter の ttk.Button

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

Download Disk

尚、ここではついでに、 Label の textvariable オプションに変数を渡すことで、 ボタンを押したときにラベルの文字を切り替えています。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Python 入門