Is it possible to pass arguments into event bindings?

前端 未结 2 1652
忘掉有多难
忘掉有多难 2020-12-02 09:49

I haven\'t found an answer elsewhere and this doesn\'t appear to have been asked yet on SO.

When creating an event binding in wxPython, is it possible to pass additi

2条回答
  •  醉梦人生
    2020-12-02 10:02

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

提交回复
热议问题