Is it possible to pass arguments into event bindings? Is it possible to pass arguments into event bindings? python python

Is it possible to pass arguments into event bindings?


You can always use a lambda or another function to wrap up your method and pass another argument, not WX specific.

b = wx.Button(self, 10, "Default Button", (20, 20))        self.Bind(wx.EVT_BUTTON, lambda event: self.OnClick(event, 'somevalue'), b)def OnClick(self, event, somearg):        self.log.write("Click! (%d)\n" % event.GetId())

If you're out to reduce the amount of code to type, you might also try a little automatism like:

class foo(whateverwxobject):    def better_bind(self, type, instance, handler, *args, **kwargs):        self.Bind(type, lambda event: handler(event, *args, **kwargs), instance)    def __init__(self):        self.better_bind(wx.EVT_BUTTON, b, self.OnClick, 'somevalue')


The nicest way would be to make a generator of event handlers, e.g.:

def getOnClick(self, additionalArgument):    def OnClick(event):        self.log.write("Click! (%d), arg: %s\n"                          % (event.GetId(), additionalArgument))    return OnClick

Now you bind it with:

b = wx.Button(self, 10, "Default Button", (20, 20))b.Bind(wx.EVT_BUTTON, self.getOnClick('my additional data'))