Python3 - Tkinter ボタンを作成する (ttk.Button)

目次

ボタンを作成する

ボタンを作成するには、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

参考リンク