目次
ボタンを作成する
ボタンを作成するには、tkinter.ttk
モジュールの Button クラスを利用します。
Button
オブジェクトを生成するときは、 「親ウィジェット」と「オプション」を指定することができます。
text オプション
text
オプションに文字列を指定すると、その文字列がボタンに表示されます。
Example
source code
from tkinter import Tk
from tkinter import ttk
class MainFrame(ttk.Frame):
def __init__(self, master):
super().__init__(master)
self.configure(padding=(6, 4))
self.pack()
self.make_style()
self.create_widgets()
def make_style(self):
pass
def create_widgets(self):
self.button1 = ttk.Button(self, text="BUTTON 1")
self.button1.pack(side="top", padx=4, pady=4)
self.button2 = ttk.Button(self, text="BUTTON 2")
self.button2.pack(side="top", padx=4, pady=4)
root = Tk()
root.title("Tkinter win")
frame = MainFrame(root)
frame.mainloop()
result
command オプション
command オプションに関数またはメソッドを指定すると、 ボタンを左クリックした時にその関数が実行されます。 左クリックでは無く、ボタンをフォーカスしてスペースキーを押しても関数が実行されます。
Example
source code
from tkinter import Tk
from tkinter import ttk
class MainFrame(ttk.Frame):
def __init__(self, master):
super().__init__(master)
self.configure(padding=(6, 4))
self.pack()
self.make_style()
self.create_widgets()
def make_style(self):
pass
def create_widgets(self):
self.button1 = ttk.Button(self, text="BUTTON 1",
command=self.button1_action)
self.button1.pack(side="top", padx=4, pady=4)
self.button2 = ttk.Button(self, text="BUTTON 2",
command=self.button2_action)
self.button2.pack(side="top", padx=4, pady=4)
def button1_action(self):
print("Call button1_action")
def button2_action(self):
print("Call button2_action")
root = Tk()
root.title("Tkinter win")
frame = MainFrame(root)
frame.mainloop()
result
表示内容:
「text オプション」と同様。
ターミナル (BUTTON 1 をクリックした時):
Call button1_action
ターミナル (BUTTON 2 をクリックした時):
Call button2_action
ボタンに指定した関数を呼び出す
ttk.Button
オブジェクトの invoke
メソッドを使うことで、
ボタンに指定した関数を呼び出すことができます。
Enter キーでボタンに指定した関数を実行する
ttk.Button
オブジェクトの bind
メソッドで、
Enter キーを押した時に関数を実行するようにすることができます
(Enter キーでは無く、例えば Z キーで関数を実行することも可能)。
bind
メソッドだけだと、ボタンの表示は変化しません。
ボタンを押す、押したボタンが戻るというアニメーションが必要な場合は、
state
メソッドを使うことで、実現することができます。
詳細は Example を参照ください。
Example
source code
from tkinter import Tk
from tkinter import ttk
class MainFrame(ttk.Frame):
def __init__(self, master):
super().__init__(master)
self.configure(padding=(6, 4))
self.pack()
self.make_style()
self.create_widgets()
def make_style(self):
pass
def create_widgets(self):
self.button1 = ttk.Button(self, text="BUTTON 1",
command=self.button1_action)
self.button1.bind("<KeyPress-Return>",
self.button_enter_key_press)
self.button1.bind("<KeyRelease-Return>",
self.button_enter_key_release)
self.button1.pack(side="top", padx=4, pady=4)
self.button2 = ttk.Button(self, text="BUTTON 2",
command=self.button2_action)
self.button2.bind("<KeyPress-Return>",
self.button_enter_key_press)
self.button2.bind("<KeyRelease-Return>",
self.button_enter_key_release)
self.button2.pack(side="top", padx=4, pady=4)
def button1_action(self):
print("Call button1_action")
def button2_action(self):
print("Call button2_action")
def button_enter_key_press(self, event):
event.widget.state(["pressed"])
event.widget.invoke()
def button_enter_key_release(self, event):
event.widget.state(["!pressed"])
root = Tk()
root.title("Tkinter win")
frame = MainFrame(root)
frame.mainloop()
result
表示内容:
「text オプション」と同様。
ターミナル (BUTTON 1 をフォーカスして、Enter キーを押した時):
Call button1_action
ターミナル (BUTTON 2 をフォーカスして、Enter キーを押した時):
Call button2_action
参考リンク
- tkinter.ttk --- Tk のテーマ付きウィジェット — Python 3.7.4rc1 ドキュメント
- tkinter --- Tcl/Tk の Python インタフェース — Python 3.7.4rc1 ドキュメント
- TkDocs - Tk Tutorial - Basic Widgets # Button
- Tcl Developer Site - bind manual page - Tk Built-In Commands
- Tcl Developer Site - ttk::button manual page - Tk Themed Widget
- Tcl Developer Site - button manual page - Tk Built-In Commands