如何将参数传递给wxPython中的事件处理程序?
这是我的代码:
def close_handler(event):
baz(foo)
...
foo = 'bar'
frame.Bind(wx.EVT_CLOSE, close_handler)
如何将foo传递给close_handler()
函数?
答案 0 :(得分:4)
import functools
def close_handler(event, foo):
baz(foo)
foo = 'bar'
func = functools.partial(close_handler, foo=foo)
frame.Bind(wx.EVT_CLOSE, func)
或者为了节省一些空间:
import functools
def close_handler(event, foo):
baz(foo)
frame.Bind(wx.EVT_CLOSE, functools.partial(close_handler, foo='bar'))
答案 1 :(得分:2)
让close_handler
创建使用foo
的第二个事件处理函数:
def close_handler(foo):
return lambda event: baz(foo)
foo = 'bar'
frame.Bind(wx.EVT_CLOSE, close_handler(foo))
此处lambda event: baz(foo)
是一个匿名函数,它调用baz(foo)
,默默地丢弃event
参数。或者,如果您愿意,可以将其传递给baz
:lambda event: baz(foo, event)
。
您也可以不使用lambda
这样写:
def close_handler(foo):
def event_handler(event):
return baz(foo)
return event_handler