【发布时间】:2009-08-20 20:01:42
【问题描述】:
如何将参数传递给 wxPython 中的事件处理程序?
这是我的代码:
def close_handler(event):
baz(foo)
...
foo = 'bar'
frame.Bind(wx.EVT_CLOSE, close_handler)
如何将 foo 传递给close_handler() 函数?
【问题讨论】:
如何将参数传递给 wxPython 中的事件处理程序?
这是我的代码:
def close_handler(event):
baz(foo)
...
foo = 'bar'
frame.Bind(wx.EVT_CLOSE, close_handler)
如何将 foo 传递给close_handler() 函数?
【问题讨论】:
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'))
【讨论】:
让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
【讨论】: