【问题标题】:Python:function getting called even when button not pressed [duplicate]Python:即使未按下按钮也会调用函数[重复]
【发布时间】:2018-10-22 04:17:05
【问题描述】:
from tkinter import *

a=float(input("a"))
b=float(input("b"))

def abc(x,y):
    print(x+y)

root=Tk()

b1=Button(root,text="add", command=abc(a,b))

b1.pack()

root.mainloop()

这是我的机器代码,当用户输入并按下按钮时,它可以添加两个数字。 但是在此代码中,即使未按下按钮,也会调用函数并在终端上打印输出。请在代码中提出原因和更正。 谢谢

【问题讨论】:

    标签: python button tkinter


    【解决方案1】:

    您的解决方案可能是这样的:

    您可以使用 lambda 创建所谓的匿名函数。在任何方面它都是一个函数,只是它没有名字。当您调用 lambda 命令时,它会返回对创建函数的引用,这意味着它可以用于按钮的命令选项值。

    from tkinter import *
    
    a = float(input('Enter first value:')
    b = float(input('Enter second value:')
    
    root = Tk()
    
    def abc(x,y):
        print x+y
    
    b1 = Button(root, text='add', command=lambda: abc(a,b))
    b1.pack()
    
    root.mainloop()
    

    【讨论】:

    • 纯代码答案不是很有用。它要求我们将您的代码逐行和逐字符与原始代码进行比较,以查看发生了什么变化。即便如此,它也不能帮助我们理解为什么你改变了一些东西。如果您解释了更改的内容和原因,您的回答会更有用。
    • 我添加了一些细节,为什么我添加了 lambda 函数
    【解决方案2】:

    您必须使用lambda 来完成此任务:

    b1 = Button(root, text='add', command = lambda: abc(a,b))
    

    【讨论】:

      【解决方案3】:

      对于命令参数,你必须传递函数而不是运行它。这意味着你必须通过 abc 而不是 abc()。当您传递 abc() 时,该函数会在您创建按钮时自动调用。 所以你有两个解决方案:

      使用 lambda:

      b1 = Button(root, text='add', command = lambda a,b: abc(a,b))
      

      或者在函数参数中传递输入:

      def abc(x=float(input('a')),y=float(input("y"))):
          print(x+y)
      
      root=Tk()
      
      b1=Button(root,text="add", command=abc)
      
      b1.pack()
      
      root.mainloop()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-22
        • 2013-02-11
        相关资源
        最近更新 更多