Tkinter

[python/tkinter] クリックイベントに引数を渡す / 複数処理を実行してみよう!

本記事では、
クリックイベントに引数を渡す方法
クリックイベントと複数処理を紐づける方法
を分かりやすく解説していきます!

tkinterなどでUIを作成する際に、ボタンをクリックして何か処理を実行させるのは必要不可欠ですよね。

すらいむ管理人

今回は、冒頭でも書いたようにクリックイベントを少し応用した使い方を紹介していきたいと思います!

今回紹介すること

では順に解説していきます!

ブックマークするといつでも確認することができます!

ボタンクリックイベントを作成してみる

まずは、ウィンドウ上のボタンをクリックした際に、”ボタンが押されました!” とテキストボックス上に表示させるプログラムを作成してみます。

ボタンの配置方法やクリックイベントなどを詳しく知りたい方はこちらの記事を参考にしてみてください!

  →  Buttonメソッドのオプションや、配置方法、クリック時に処理を行う方法

commandオプションで指定する

tk.Button()commandオプションに関数を与えてあげることでクリックイベントと紐づけることができます。

button1 = tk.Button(root, text, command)

では実際にプログラムを書いていきましょう!

import tkinter as tk

class ButtonClick:
    def __init__(self, root):
        # textbox表示
        self.textbox = tk.Entry(width=50)
        self.textbox.pack()
        # ボタン作成
        self.button1 = tk.Button(root, text = "ボタン", command = self.button_click)
        self.button1.pack()

    # ボタンクリック時処理
    def button_click(self):
        self.textbox.insert(0, "ボタンが押されました!")

if __name__=="__main__":
    # window作成
    root = tk.Tk()
    root.geometry("400x100")   
    # インスタンス作成
    ins = ButtonClick(root)  
    root.mainloop()

では実際にこのプログラムを実行してみましょう!
すると下記のようなウィンドウが表示されます!

result conduct program
プログラムの実行結果

次にこのボタンをクリックしてみるとしっかりとボタンクリック時の処理が実行されています。

after click button
ボタンクリック後の結果

上記プログラムでは、tk.Button()の引数 “command” に実行したい関数を与えてあげることでクリックイベントを紐づけることができます。

        # ボタン作成
        self.button1 = tk.Button(root, text = "ボタン", command = self.button_click)

.bind() メソッドで指定する

”command = ***” として指定しなくても “.bind()” メソッドを用いてイベントをバインドすることができます!

先ほどのtk.Button()メソッドのcommandオプションを削除して下記のように変更しても同様に関数をクリックイベントに紐づけることができます。

        # ボタン作成
        self.button1 = tk.Button(root, text = "ボタン")
        self.button1.bind("<button-1>", self.button_clic)
        self.button1.pack()

bind()メソッドを用いると、ボタンをクリックした際に複数のイベントを呼び出すことができます!

これは記事の後半で説明していますので最後まで見ていってください(^^)

すらいむ管理人

ボタンクリックでいろいろなことができそうですね!

ボタンクリックイベントに引数を渡す方法

これまで説明してきた方法では、クリックイベントを呼び出すことはできても呼び出した関数に何か引数を与えて処理をさせることができませんでした。。。

ですが、pythonのはそんなかゆいところに手が届く書き方があります!

それが”lambda式”になります。

すらいむ管理人

では “lambda式” の書き方を紹介していきたいと思います!

 commandオプションで”lambda式”を用いる

tk.Button()メソッドcommandオプションおよびボタンクリック時の処理を下記のように書き換えてみてください。

# ボタン作成
self.button1 = tk.Button(root, text = "ボタン", 
                                    command = lambda: self.button_click("ボタンが押されました!"))

# ボタンクリック時処理
def button_click(self, label):
    self.textbox.insert(0, label)

すると、実行したい関数に()で指定した任意の引数を渡すことができました!

スポンサーリンク

スポンサーリンク

クリックイベントを複数呼び出す方法

また、ボタンをクリックした際に関数を複数実行したいこともありますよね!

すらいむ管理人

そのようなときは.bind()メソッドaddオプションを使います!

方法は、下記のようにクリックイベントに紐づけたい関数を.bind()メソッドでボタンに紐づけていきtます。

この時2つめ以降の.bind()メソッドには、第三引数に”+”を渡すようにしてください!

そうすることで複数の関数を紐づけていくことができます!

        # ボタン作成
        self.button1 = tk.Button(root, text = "ボタン")
        self.button1.bind("<Button-1>", self.button_click)
        self.button1.bind("<Button-1>", self.button_click2, "+")

実際にコードを書いてみます。

import tkinter as tk

class ButtonClick:
    def __init__(self, root):
        # textbox表示
        self.textbox = tk.Entry(width=50)
        self.textbox.pack()
        # ボタン作成
        self.button1 = tk.Button(root, text = "ボタン")
        self.button1.bind("<Button-1>", self.button_click)
        self.button1.bind("<Button-1>", self.button_click2, "+")
        self.button1.pack()

    # ボタンクリック時処理1
    def button_click(self, event):
        self.textbox.insert(0, "ボタンが")
    # ボタンクリック時処理2    
    def button_click2(self, event):
        self.textbox.insert(4, "押されました!")

if __name__=="__main__":
    # window作成
    root = tk.Tk()
    root.geometry("400x100") 
    # インスタンス作成
    ins = ButtonClick(root)  
    root.mainloop()

上記プログラムを実行すしてボタンをクリックしてみると同じように表示されました!

after button clicked
すらいむ管理人

ボタンなどのウィジェットを活用していくことでアプリケーション開発の幅が広がりますね!

.insert()

ここで、insert()メソッドの第一引数 a は挿入したいオブジェクトを何番目に入れるかを指定します。

***.insert( a, object)
definision of insert()

今回の場合では、”ボタンの”というstring型リストの4番目に挿入したかったので a = “4” を指定しています。

今回は以上となります!
最後まで見ていただきありがとうございました!

他にもPython学習に役立つ書籍や優良プログラミングスクールを紹介しています!

[2023年版][難易度別] Python学習にオススメな参考書:厳選9冊!Pythonを勉強する初心者から中級者を対象として、2023年現在で本当に良いと感じた厳選9冊を紹介しています。Pythonの基礎を学べる書籍から、GUI、アプリ作成、機械学習などを学べる書籍まで幅広く紹介しています!レビューも書き込んでいます!...
【2023年最新】プログラミング上達の近道とは?スクールに通うメリットやおすすめランキングも徹底解説!プログラミングを上達するための近道を紹介しています。また、2023年度に人気の優良プログラミングスクールをランキング形式で紹介しています!特にプログラミングスクールの選び方を難易度、料金、特徴など様々な観点から紹介しています。自分自身の目的に合ったスクール選びの助けとなれば幸いです。...