一般情况下,事件处理都是下面这样的
#coding=utf-8
import Tkinter
def handler():
'''事件处理函数'''
print "handler"
if __name__=='__main__':
root = Tkinter.Tk()
# 通过中介函数handlerAdapotor进行command设置
btn = Tkinter.Button(text=u'按钮', command=handler)
btn.pack()
root.mainloop()
但如果handler()函数需要参数该怎么办呢,很简单,使用lambda
#coding=utf-8
import Tkinter
def handler(a, b, c):
'''事件处理函数'''
print "handler", a, b, c
if __name__=='__main__':
root = Tkinter.Tk()
# 通过中介函数handlerAdapotor进行command设置
btn = Tkinter.Button(text=u'按钮', command=lambda : handler(a=1, b=2, c=3))
btn.pack()
root.mainloop()
lambda真是神器啊~~
但对于想使用event的情况,像btn.bind("
#coding=utf-8
import Tkinter
def handler(event, a, b, c):
'''事件处理函数'''
print event
print "handler", a, b, c
def handlerAdaptor(fun, **kwds):
'''事件处理函数的适配器,相当于中介,那个event是从那里来的呢,我也纳闷,这也许就是python的伟大之处吧'''
return lambda event,fun=fun,kwds=kwds: fun(event, **kwds)
if __name__=='__main__':
root = Tkinter.Tk()
btn = Tkinter.Button(text=u'按钮')
# 通过中介函数handlerAdaptor进行事件绑定
btn.bind("", handlerAdaptor(handler, a=1, b=2, c=3))
btn.pack()
root.mainloop()