PythonでGUIアプリを作成できるモジュールtkinter(ティーキンター)のButtonの使い方について解説します。
サンプルコードはモジュールのインポートを from tkinter import *
としています。
関数を呼び出す際にパッケージ名の接頭辞 (tk.Frame()
のtk.
)を省略できるのでおすすめです。
Buttonとは
Buttonはクリック時の動作を設定できるWidget(ウィジェット)です。
オプションを指定することで、ボタンの装飾や画像表示することが可能です。
Buttonのオプション一覧
Buttonで指定可能なオプション一覧です。
オプション | 説明 | 値の形式 |
---|---|---|
text | 表示するテキストを指定 | 文字列 |
command | ボタン押下時のイベント処理 | 関数またはメソッド |
bg (background) | 背景色 | 色名または16進数カラーコード |
fg (foreground) | 文字色 | 色名または16進数カラーコード |
width | ボタンの幅 | テキスト単位(ピクセルではない) |
height | ボタンの高さ | テキスト単位(ピクセルではない) |
font | フォントタイプ・サイズを指定 | タプル(フォント名, サイズ) |
padx | ボタンの内側に縦方向のスペースを追加 | ピクセル値 |
pady | ボタンの内側に横方向のスペースを追加 | ピクセル値 |
anchor | テキストを配置する基準位置 デフォルトはCENTER] | (基本)CENTER, N, S, W, E (組合せ)NW, NE, SW, SE |
relief | 枠線タイプ (デフォルト値はflat) | flat, solid, groove, raised, ridge, sunken |
bd (borderwidth) | 枠線の幅(デフォルトは2px) relief とセットで設定 | ピクセル値 |
cursor | マウスオーバー時のカーソルタイプ | カーソルタイプ |
justify | テキストが複数行にわたる場合の配置位置 | LEFT, CENTER, RIGHT |
textvariable | 文字列を動的に変化させる場合に使用 | StringVarクラスのインスタンスを指定 |
image | 表示する画像を指定 | PhotoImageオブジェクト |
state | ボタンの状態を設定 | NORMAL, DISABLED |
repeatdelay | 長押しクリックの判定秒数 | ミリ秒 |
repeatinterval | 長押し時の動作間隔 | ミリ秒 |
テキスト表示(text)
ボタンのテキストを表示するにはtext
で文字列を指定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | from tkinter import * root = Tk() root.title('Buttonの使い方') root.geometry('200x100') # ボタン設定 button1 = Button(root, text='ボタン1') button2 = Button(root, text='ボタン2') # ボタンを配置 button1.pack() button2.pack() root.mainloop() |
このコードだけではボタンをクリックしてもイベントは発生しません。
イベントを発生させるには次に説明するcommandオプションを設定します。
イベント処理(command)
ボタン押下時にイベントを発生させるにはcommand
オプションで関数やメソッドを指定します。
下の例では、ボタンをクリックした時にテキストを変更する処理を設定しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | from tkinter import * # クリック時に動作させる関数 def click_btn(): button1['text'] = 'クリックしました' root = Tk() root.title('Buttonの使い方') root.geometry('200x100') # ボタン設定 button1 = Button(root, text='ボタン1', command=click_btn) button2 = Button(root, text='ボタン2') # ボタンを配置 button1.pack() button2.pack() root.mainloop() |
command=click_btn
を設定することで、クリック時に関数click_btn
を呼び出してボタンのテキストを変更しています。
引数を渡して関数を呼び出す(command=lambda:)
ボタン押下時に発生させる関数に引数を指定したい場合は、lambda式を使用する必要があります。
以下の例では、ボタンを押した時にそれぞれのボタンに応じた引数を渡してメッセージを表示しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | from tkinter import * from tkinter import messagebox def btn_click(msg): messagebox.showinfo('サンプル', msg + " がクリックされました") root = Tk() root.title('Buttonの使い方') root.geometry('200x100') # ボタン設定 button1 = Button(root, text='ボタン1', command=lambda:btn_click('ボタン1')) button2 = Button(root, text='ボタン2', command=lambda:btn_click('ボタン2')) # ボタンを配置 button1.pack() button2.pack() root.mainloop() |
背景色(bg)
背景色を設定するには、bg
(background
)を指定します。
値は色名か16進数カラーコードを指定します。
・参考サイト:色の名前とカラーコードが一目でわかるWEB色見本 原色大辞典
1 2 | button1 = Button(root, text='ボタン1', bg='pink') button2 = Button(root, text='ボタン2', bg='#87ceeb') |
文字色(fg)
文字色を設定するには、fg
(foreground
)を指定します。
値は色名か16進数カラーコードを指定します。
・参考サイト:色の名前とカラーコードが一目でわかるWEB色見本 原色大辞典
1 2 | button1 = Button(root, text='ボタン1', fg='blue') button2 = Button(root, text='ボタン2', fg='#ff0000') |
幅・高さ(width, height)
ボタンの幅と高さは文字列に合わせて自動で伸縮しますが、width
, height
でサイズを指定することができます。
1 2 | button1 = Button(root, text='ボタン1', width=10, height=3) button2 = Button(root, text='ボタン2') |
フォント指定(font)
フォントの種類とサイズを変更するにはfont
をタプル(フォント名, サイズ)で指定します。
1 2 | button1 = Button(root, text='ボタン1', font=('MS UI Gothic', 20)) button2 = Button(root, text='ボタン2', font=('MS P明朝', 14)) |
ボタン内部にスペースを追加(padx, pady)
padx
, pady
でラベルの枠とテキストの間にスペースを追加します。weight
, height
に似ていますが、こちらではテキストの内容に応じて一定のスペースを確保できます。
1 2 | button1 = Button(root, text='ボタン1', padx=20, pady=10) button2 = Button(root, text='ボタン2') |
配置の基準位置(anchor)
ラベル文字の基準位置をanchor
で指定します。
上下左右=北南西東として頭文字の記号の組み合わせで指定します。
値は、上=N
, 下=S
, 右=E
, 左=W
となります。
記号と位置関係は下図のようになります。
1 2 | button1 = Button(root, text='ボタン1', width=10, height=2, anchor=NW) button2 = Button(root, text='ボタン2', width=10, height=2, anchor=E) |
枠線(relief, bd)
relief
でラベルの枠線を設定します。
線の太さを変更したい場合はbd
を指定します。デフォルトは2pxです。
1 2 3 4 5 6 | button1 = Button(root, text='flat', relief='flat', bd=4) button2 = Button(root, text='solid', relief='solid', bd=4) button3 = Button(root, text='groove', relief='groove', bd=4, width=10) button4 = Button(root, text='raised', relief='raised', bd=4, width=10) button5 = Button(root, text='ridge', relief='ridge', bd=4, width=10) button6 = Button(root, text='sunken', relief='sunken', bd=4, width=10) |
sunken
はボタンを押した時に変化が無いため押したことが分かりにくくなります。
カーソル(cursor)
cursor
を指定するとマウスオーバーした時のカーソルタイプを変更できます。
1 2 | button1 = Button(root, text='ボタン1', cursor='hand2') button2 = Button(root, text='ボタン2') |
カーソルのタイプは全部で75個ありますが、実際に使えそうなものは限られています。
以下がサンプルになります。全タイプを確認したい場合はこちらのサイトで確認できます。
カーソル | オプション |
---|---|
arrow | |
center_ptr | |
circle | |
crosshair | |
draft_large | |
draft_small | |
left_ptr | |
hand1 | |
hand2 | |
tcross | |
top_left_arrow | |
X_cursor |
複数行の配置位置(justify)
ボタンの文字列が複数行の場合にjustify
で寄せ方向を指定できます。
設定値はLEFT
, CENTER
, RIGHT
で、デフォルトはCENTER
です。
1 | button1 = Button(root, text='テキストが複数行の場合の\n配置位置', justify=LEFT) |
文字列を動的に変更(textvariable)
textvariable
を指定することで、ボタンに表示する文字列を動的に変化させることができます。
設定値は、StringVarクラスのインスタンスを参照する変数を指定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | from tkinter import * # クリック時に動作させる関数 def btn_click(): btn_text.set("クリックされました") root = Tk() root.title('Buttonの使い方') root.geometry('200x100') # StringVarクラスのインスタンス生成 btn_text = StringVar(root) # インスタンスに文字列をセット btn_text.set("クリックしてください") # ボタン設定 button = Button(root, textvariable=btn_text, command=btn_click) # ボタンを配置 button.pack() root.mainloop() |
画像表示(image)
ボタンにはテキストだけでなく画像を表示することもできます。
画像ファイルをPhotoImageオブジェクトとして読み込みimage
に設定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | from tkinter import * # クリック時に動作させる関数 def btn_click(): button['bg']='red' root = Tk() root.title('Labelの使い方') root.geometry('200x100') img = PhotoImage(file='./python_logo.png') # ボタン設定 button = Button(root, image=img, command=btn_click) # ボタンを配置 button.pack() root.mainloop() |
ボタンの状態設定(state)
state
でボタンのクリック可否を設定できます。
特定の処理をした後に、ボタンを有効にしたい場合などに活用できます。
以下の例ではボタンのクリックで、クリック可否を切り替えています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | from tkinter import * # クリック時に動作させる関数 def btn1_click(): button2['state']=NORMAL button2['text']='クリック可能' button1['state']=DISABLED button1['text']='クリック不可' def btn2_click(): button1['state']=NORMAL button1['text']='クリック可能' button2['state']=DISABLED button2['text']='クリック不可' root = Tk() root.title('Buttonの使い方') root.geometry('200x100') # ボタン設定 button1 = Button(root, text='クリック可能', state=NORMAL, command=btn1_click) button2 = Button(root, text='クリック不可', state=DISABLED, command=btn2_click) # ボタンを配置 button1.pack() button2.pack() root.mainloop() |
長押し時の繰り返し設定(repeatdelay, repeatinterval)
ボタンを長押しした時にイベント処理を連続して動作させたい場合に設定します。
repeatdelay
で長押しとして判定する秒数を設定して、repeatinterval
でイベント処理の動作間隔の秒数をミリ秒で設定します。
以下の例では、ボタンを0.1秒以上長押しするとbtn_click
関数が動作して、その後長押しを続けると1秒間隔で関数が動作します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | from tkinter import * # クリック時に動作させる関数 def btn_click(): global cnt cnt += 1 text.set(cnt) root = Tk() root.title('Buttonの使い方') root.geometry('200x100') # カウンタ設定 cnt = 0 # ボタン設定 button = Button(root, text='カウント', command=btn_click, repeatdelay=100, repeatinterval=1000) text = StringVar(root) text.set(cnt) label = Label(root, textvariable=text) # ボタンを配置 button.pack() label.pack() root.mainloop() |
以上でButtonの使い方の解説は終了です。
以下の記事も参考にしてみて下さい。
・関連記事:PythonでGUIアプリを作成する(tkinter)
・関連記事:【Python/tkinter】Label(ラベル)の使い方
・関連記事:【Python/tkinter】Entry(エントリー)の使い方
・関連記事:【Python/tkinter】Canvas(キャンバス)の使い方