お知らせ
2021年5月17日
[Python] Tkinterのボタンが押された時に引数付き関数を呼び出したい。
PythonでGUIを作るためにTkinterを使ってボタン作成している時に引っかかった事がありました。
・作成コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import tkinter as tk from tkinter import messagebox import tkinter.ttk as ttk def msg_show(message): messagebox.showinfo( "メッセージ" , message) # rootメインウィンドウの設定 root = tk.Tk() root.title( "ボタン確認" ) root.geometry( "200x100" ) # メインフレームの作成と設置 frame = ttk.Frame(root) frame.pack(fill = tk.BOTH, padx = 20 ,pady = 10 ) # ボタンウィジェットの作成 button = tk.Button(frame, text = "ボタン" , command = msg_show( "ボタンが押されました。" )) # ボタンウィジェットの設置 button.pack() root.mainloop() |
以下は正常時の表示されるGUIになります。
ボタンを押すことでメッセージを表示します。
ボタン作成は以下のように作成していました。
1 | button = tk.Button(frame, text = "ボタン" , command = msg_show( "ボタンが押されました。" )) |
commandに引数付き関数を設定しています。ボタンが押された際に引数に指定した「ボタンが押されました。」というメッセージを表示します。
上記のコードで実行してGUIを表示してみたところ動きが正しくないんです。
GUIを表示した段階でメッセージが表示されてしまいます。ボタンも押していないのに…(そもそもまだボタン表示されていない)
commandに引数付き関数を指定する際は以下のように記述する事で正常に動かすことが出来ました。
1 | command = lambda :msg_show( "ボタンが押されました。" ) |
引数付き関数を指定する際は「lambda」を忘れないようにしましょう。