見出し画像

[Python]TkinterのButtonウィジェットに設定した関数が勝手に実行されてしまう際の対処法

TkinterのButtonウィジェットを使用する際に、commandパラメータに引数付きで関数を設定すると、ウィンドウの表示時に勝手に実行されてしまうことがあるようです。

PythonでGUIアプリを作ろうとしたときに少しつまずいたので忘備録も兼ねてまとめておこうと思います。

症状

下のようなコードを実行したとき、ウィンドウ上に表示されるボタンを押していなくても関数(下のコードだと print_str)が実行されてしまうというものです。

import tkinter

def print_str (arg1) :
	print(arg1)

app = tkinter.Tk()
app.geometry("300x300")

button = tkinter.Button(app,
                        text="ボタン",
                        command=print_str("テスト")) #該当箇所

button.place(relx=0.5,rely=0.3)

if __name__ == "__main__" :
	app.mainloop()

対処法

commandパラメータに関数を指定する際に、「lambda」を用いるとこの現象を回避できます。

import tkinter

def print_str (arg1) :
	print(arg1)

app = tkinter.Tk()
app.geometry("300x300")

button = tkinter.Button(app,
                        text="ボタン",
                        command=lambda:print_str("テスト")) #修正箇所

button.place(relx=0.5,rely=0.3)

if __name__ == "__main__" :
	app.mainloop()


この記事が気に入ったらサポートをしてみませんか?