Python:即使未按下按钮,函数也会被调用

时间:2018-10-22 04:17:05

标签: python button tkinter

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()

这是我的机器代码,当用户输入并按下按钮时,该机器可以加两个数字。 但是在这段代码中,即使未按下按钮,功能也会被调用,并且输出将输出到终端上。请在代码中说明原因和更正。 谢谢

3 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

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

@objc func doSomethingAboutLocation(_ notification: Notification) {
    if let notificationInfo = notification.userInfo {
       let coordinate = CLLocation(latitude: notificationInfo["lat"] as! Double, longitude: notificationInfo["long"] as! Double)
       // use your coordinate as you want
    }
}

答案 2 :(得分:0)

对于命令参数,您必须传递函数以使其不运行。这意味着您必须传递abc而不是abc()。传递abc()时,创建按钮时会自动调用该函数。 因此,您有2个解决方案:

使用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()