本記事では、
「クリックイベントに引数を渡す方法」
「クリックイベントと複数処理を紐づける方法」
を分かりやすく解説していきます!
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()
では実際にこのプログラムを実行してみましょう!
すると下記のようなウィンドウが表示されます!
次にこのボタンをクリックしてみるとしっかりとボタンクリック時の処理が実行されています。
上記プログラムでは、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()
上記プログラムを実行すしてボタンをクリックしてみると同じように表示されました!
ボタンなどのウィジェットを活用していくことでアプリケーション開発の幅が広がりますね!
.insert()
ここで、insert()メソッドの第一引数 a は挿入したいオブジェクトを何番目に入れるかを指定します。
***.insert( a, object)
今回の場合では、”ボタンの”というstring型リストの4番目に挿入したかったので a = “4” を指定しています。
今回は以上となります!
最後まで見ていただきありがとうございました!
他にもPython学習に役立つ書籍や優良プログラミングスクールを紹介しています!