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'))