Python 事件绑定中的函数回调,带括号和不带括号

Python 事件绑定中的函数回调,带括号和不带括号,python,tkinter,Python,Tkinter,我刚开始编写第一个Python程序,在函数回调方面遇到了一个非常奇怪的问题。以下是符合我期望的代码: from tkinter import * def say_hello(): print('hello') root = Tk() Button(root, text='say hello', command=say_hello).pack() root.mainloop() 现在,如果我在函数名中添加括号 Button(root, text='say hello', comman

我刚开始编写第一个Python程序,在函数回调方面遇到了一个非常奇怪的问题。以下是符合我期望的代码:

from tkinter import *

def say_hello():
    print('hello')

root = Tk()
Button(root, text='say hello', command=say_hello).pack()
root.mainloop()
现在,如果我在函数名中添加括号

Button(root, text='say hello', command=say_hello()).pack()
“hello”仅在程序启动时打印一次,但单击按钮后不会再打印。为什么?


谢谢

当您添加括号时,您会立即调用函数打印hello,其返回值(而不是函数本身)将用作回调

返回值None是有效的回调,表示按钮没有回调函数。如果say_hello返回一个int,那么当您单击按钮时可能会出现一个错误,大意是int不是一个可调用的值。

say_hello是函数。在第一种情况下,你们提供它作为参数,说这里是按钮,她的函数说你好。按下时执行并调用此函数

第二种情况-如果您在函数后写括号,这就是函数调用。因此,您并没有为按钮提供稍后调用的内容,而是提供原始值

整体而言,回调的概念是:您提供了一些可调用的功能,在您的案例中向您的案例中的对象按钮打招呼,以便对象在以后决定在您的案例中回调时,按下该按钮