How to pass an argument to an event handler in wxPython?
Here's my code:
def close_handler(event):
baz(foo)
...
foo = 'bar'
frame.Bind(wx.EVT_CLOSE, close_handler)
How to pass foo to close_handler()
function?
How to pass an argument to an event handler in wxPython?
Here's my code:
def close_handler(event):
baz(foo)
...
foo = 'bar'
frame.Bind(wx.EVT_CLOSE, close_handler)
How to pass foo to close_handler()
function?
Have close_handler
create a second event-handling function that uses foo
:
def close_handler(foo):
return lambda event: baz(foo)
foo = 'bar'
frame.Bind(wx.EVT_CLOSE, close_handler(foo))
Here lambda event: baz(foo)
is an anonymous function that calls baz(foo)
, silently discarding the event
argument. Or you could pass it to baz
if you wanted: lambda event: baz(foo, event)
.
You could also write this without using lambda
like so:
def close_handler(foo):
def event_handler(event):
return baz(foo)
return event_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)
Or to conserve some space:
import functools
def close_handler(event, foo):
baz(foo)
frame.Bind(wx.EVT_CLOSE, functools.partial(close_handler, foo='bar'))