首页  >  文章  >  后端开发  >  为什么 Tkinter 按钮中的“Command”参数在声明后执行?

为什么 Tkinter 按钮中的“Command”参数在声明后执行?

Barbara Streisand
Barbara Streisand原创
2024-10-19 07:57:30497浏览

Why Does the

按钮参数“Command”在声明时执行:已解决

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn