在 tkinter 中,Button 小部件的“command”参数旨在当按钮被执行时执行回调按下。然而,令人费解的是为什么回调函数在声明后立即执行,而不是在单击按钮时执行。
关键在于实例创建过程中参数的评估。当将函数作为“命令”参数传递时,Python 首先评估该函数,并使用括号内传递的任何参数来调用它。例如,在下面的代码中:
<code class="python">def Hello(): print("Hi there!") hi = Button(frame, text="Hello", command=Hello())</code>
代码调用Hello函数,由于没有return语句而返回一个None值,并将这个None值作为“command”参数传递给按钮。因此,单击按钮时不会执行回调,并且初始评估会打印“Hi There!”。
要纠正此问题并确保仅在单击按钮时执行回调,请传递该函数本身,不带括号:
<code class="python">hi = Button(frame, text="Hello", command=Hello)</code>
此修改将 Hello 函数保留为可调用对象,单击按钮时将调用该对象。
了解函数对象及其返回值之间的根本区别在这种情况下至关重要。函数对象由 function_name 引用,而 function_name() 表示返回值。前者是可调用的,后者是调用函数的结果。
本质上,在定义 Button 的“命令”参数时,必须传递函数对象,而不是其返回值,以避免过早执行。这种区别为单击按钮时的无缝回调功能铺平了道路。
以上是为什么 Tkinter 按钮中的'Command”参数在声明后执行?的详细内容。更多信息请关注PHP中文网其他相关文章!