【问题标题】:Function callback in event binding, w/ and w/o parentheses事件绑定中的函数回调,带和不带括号
【发布时间】:2019-01-29 12:25:12
【问题描述】:

我刚开始使用我的第一个 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' 只会在程序启动时打印一次,但在单击按钮时不会再有任何反应。为什么?

谢谢!

【问题讨论】:

    标签: python tkinter


    【解决方案1】:

    当你添加括号时,你调用函数(立即打印“hello”),它的返回值(不是函数本身)被用作回调。

    None的返回值是一个有效的回调,说明Button没有回调函数。如果say_hello 返回了一个int,当您单击按钮时您可能会收到一个错误,表明int 不是可调用值。

    【讨论】:

      【解决方案2】:

      say_hello 是函数。在第一种情况下,您将其作为参数提供,说“这是按钮,她的函数say_hello。当你被按下时执行(调用)这个函数”。

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

      整体回调的想法——你提供一些可调用的东西(在你的例子中是函数say_hello)给对象(在你的例子中是Button),这样对象就可以在将来回调,当它决定这样做(在你的情况下,按下时)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-25
        • 1970-01-01
        • 2020-04-17
        • 1970-01-01
        • 2016-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多