質問: tkinter.Button(root, text="おみくじを引く", font=( "TimesNewRoman", 36), fg="skyblue", command=click_btn) # foreground(文字が空色) button.place(x=360, y=400) root.mainloop() ```
回答: PythonスクリプトはPythonインタープリタが読み込んで解釈しながら実行します。 Pythonインタープリタが関数定義をみつけると、関数オブジェクトに変換して、オブジェクトの `__call__` メソッドに関数処理内容をコンパイルした実行コードを埋め込みます。 () をつけないと関数オブジェクトそのものを変数に代入します。関数処理は実行しません。 () を付けると `__call__`メソッドを呼び出して関数処理を実行し、処理結果が変数に代入されます。 ボタン定義時のコールバック関数に()を付けてしまうと、ボタン生成前にボタンが押されたときの処理が実行されてしまい、その処理結果がボタンを押したときのコールバック関数だと勘違いして登録されます。