株式会社アースリンクでは一緒に働く仲間を募集しています
PythonでGUIを作るためにTkinterを使ってボタン作成している時に引っかかった事がありました。
・作成コード
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になります。
ボタンを押すことでメッセージを表示します。
ボタン作成は以下のように作成していました。
button = tk.Button(frame, text="ボタン", command=msg_show("ボタンが押されました。"))
commandに引数付き関数を設定しています。ボタンが押された際に引数に指定した「ボタンが押されました。」というメッセージを表示します。
上記のコードで実行してGUIを表示してみたところ動きが正しくないんです。
GUIを表示した段階でメッセージが表示されてしまいます。ボタンも押していないのに…
(そもそもまだボタン表示されていない)
commandに引数付き関数を指定する際は以下のように記述する事で正常に動かすことが出来ました。
command=lambda:msg_show("ボタンが押されました。")
引数付き関数を指定する際は「lambda」を忘れないようにしましょう。