如何给Tkinter窗口小部件的command属性的可执行对象传递参数



#coding:gbk
import Tkinter
w=Tkinter.Tk()
def add(a,b):
print a+b
b=Tkinter.Button(text=u'相加',command=add(1,2))
b.pack()
w.mainloop()

command属性只能接受可执行对象,比如:command=add ,如果函数需要参数的话,你不能想当然的是:command=add(1,2) ,这样程序运行就不会是你想像的那样。程序会在你按下“相加”按钮这前把a+b的结果打印出来,而在你按下按钮的时候却什么也没做,因为command=add才是将可执行对象“add”赋予了属性command,而command=add(1,2)是将函数调用add(1,2)的执行结果赋予了属性command,而函数add并没有反回值。但是应该怎样给command属性的可执行对象传递参数呢?很简单,程序修改如下:

#coding:gbk
import Tkinter
w=Tkinter.Tk()
def add(a,b):
print a+b
b=Tkinter.Button(text=u'相加',command=lambda:add(1,2))
b.pack()
w.mainloop()

表达式lambda:add(1,2)反回一个匿名函数-一个可执行对象,而这个可执行对象执行的内容就是我们想要的 add(1,2)。

没有评论:

发表评论