Python 入門

ホーム > Tkinter による GUI プログラミング > Button - Tkinter のウィジェット

Button - Tkinter のウィジェット

ここでは Tk 8.5 から利用可能となった ttk モジュールの、ttk.Button ウィジェットの利用方法を説明します。

全ての使い方を網羅しているわけではありませんが、なるべく典型的な利用パターンについては触れたいと思います。

Button ウィジェットでは文字や画像を表示するボタンを作成できます。

ボタンが押されたときに呼び出されるファンクションは、Button ウィジェットの command オプションに指定します。

ここでは FrameLabel ウィジェットも使われています。

from tkinter import ttk

root = Tk()
root.title('Button Example')

# Frame as Widget Container
frame1 = ttk.Frame(
    root,
    padding=5)
frame1.grid()

# Label 1
icon = PhotoImage(file='pen.png')

label1 = ttk.Label(
    frame1,
    image=icon)
label1.grid(row=1,column=1)

# String
s = StringVar()
s.set('Going Back To School')

# Label 2
label2 = ttk.Label(
    frame1,
    textvariable=s,
    width=30,
    anchor=W,
    padding=(5,10))
label2.grid(row=1,column=2)

# Button 1
def button1_clicked():
    root.quit()

button1 = ttk.Button(
    frame1,
    text='OK',
    command=button1_clicked)
button1.grid(row=2,column=1,columnspan=2)

root.mainloop()

この結果は次のような画面となり、OK ボタンを押すとプログラムが終了します。

tkinter の ttk.Button

ボタンの command オプションに button1_clicked という名前の関数が指定されています。この関数の中で ルートの quit() メソッドを呼び出しているために、メインループが終わり、それに伴いプログラムが終了します。

quit() は全てのウィジェットに実装されているユニバーサルメソッドのひとつです。

ボタンの状態の制御

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

tkinter の ttk.Button

ここでは 2 番目のボタンが無効化 されています。これをするには、 state メソッドに disabled を渡します。

from tkinter import *
from tkinter import ttk

root = Tk()
root.title('Button Example')

frame1 = ttk.Frame(
    root,
    padding=5)
frame1.grid()

button1 = ttk.Button(
    frame1,
    width=5,
    text='1')
button1.grid(row=1,column=1)

button2 = ttk.Button(
    frame1,
    width=5,
    text='2')
button2.state(['disabled'])
button2.grid(row=1,column=2)

root.mainloop()

また、次のようにボタンを押した状態のままにするには、以下のコードのように state メソッドに pressed もしくは !pressed を渡します。

tkinter の ttk.Button

from tkinter import *
from tkinter import ttk

root = Tk()
root.title('Button Example')

s = StringVar()

# Frame as Widget Container
frame1 = ttk.Frame(
    root,
    padding=5)
frame1.grid()

# Button 1
def dvd_clicked():
    button1.state(['pressed'])
    button2.state(['!pressed'])
    s.set("DVD clicked.")

icon1 = PhotoImage(file='disk.png')

button1 = ttk.Button(
    frame1,
    image=icon1,
    text='DVD',
    compound=TOP,
    command=dvd_clicked)
button1.grid(row=1,column=1)

# Button 2
def download_clicked():
    button1.state(['!pressed'])
    button2.state(['pressed'])
    s.set("Download clicked.")

icon2 = PhotoImage(file='download.png')

button2 = ttk.Button(
    frame1,
    image=icon2,
    text='Download',
    compound=TOP,
    command=download_clicked)
button2.grid(row=1,column=2)

# Label 1
label1 = ttk.Label(
    frame1,
    textvariable=s)
label1.grid(row=2,column=1,columnspan=2)

root.mainloop()

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

ホーム > Tkinter による GUI プログラミング > Button - Tkinter のウィジェット