【问题标题】:I don't know why only lambda function can run when I use GUI Button command我不知道为什么当我使用 GUI Button 命令时只能运行 lambda 函数
【发布时间】:2020-10-08 13:32:49
【问题描述】:
def btn_click(btn):
    global expression
    expression = expression + str(btn)
    btn_input.set(expression)


btn_7= Button(root, text = '7', width =5, height =2, command=lambda:btn_click(7))
# btn_7= Button(root, text = '7', width =5, height =2, command=btn_click(7))

那么我能知道这段代码的原因和原理吗?

【问题讨论】:

    标签: python function button tkinter lambda


    【解决方案1】:

    当您需要将函数及其参数都传递给只需要函数的东西时,这很常见。

    在您的第二个示例中,command=btn_click(7) 将调用 btn_click(7) 并将结果传递给 command,顾名思义,command 正在寻找可调用(函数)。

    如果您将函数调用包装在 lambda 中,则您会将一个未命名的可调用对象传递给 command,在调用该可调用对象时,其计算结果为 btn_click(7)

    【讨论】:

      【解决方案2】:

      你可以通过这个“命令”参数运行普通函数,但这里的重点是你不能将参数传递给函数

      def func():
          print('click')
      button = Button(root, text = '7', width =5, height =2, command=func)
      # If you run this and click the button you'll see 'click' message in the console
      

      但是假设您需要将参数传递给您的函数,例如您单击的按钮数。在这种情况下,您需要使用 lambda 函数

      def func(num):
          print(num)
      button = Button(root, text = '7', width =5, height =2, command=lambda: func(7))
      

      当你这样做时,会发生这种情况: 单击按钮时,TKinter 调用此 lambda 函数,然后 lambda 函数使用参数 '7' 调用您的 func()

      【讨论】:

        猜你喜欢
        • 2017-01-02
        • 1970-01-01
        • 2011-06-06
        • 1970-01-01
        • 1970-01-01
        • 2020-11-01
        • 2010-10-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多