Creating custom event in WxPython

Chris Lambacher lambacck at computer.org
Thu Sep 8 14:30:13 CEST 2005


You should be derriving from PyCommandEvent since only CommandEvents are set
to propegate, which is probably what you want (see the wxwidgets Event
handling overview).

In order to use Bind you will need an instance of PyEventBinder.  For the
example below that would be something like:

EVT_INVOKE = PyEventBinder(wxEVT_INVOKE)

-Chris


On Thu, Sep 01, 2005 at 04:25:05PM +0200, fraca7 wrote:
> NutJob at gmx.net a ?crit :
> 
> > Now when my socket thread detects an incoming message, I need my main
> > thread to interpret the message and react to it by updating the GUI.
> > IMO the best way to achieve this is by having my socket thread send a
> > custom event to my application's event loop for the main thread to
> > process. However, I'm at a total loss as far as creating custom events
> > is concerned. The WxWindows documentation isn't very helpful on this
> > either.
> 
> I think this is what you're looking for:
> 
> # begin code
> 
> import wx
> 
> wxEVT_INVOKE = wx.NewEventType()
> 
> class InvokeEvent(wx.PyEvent):
>      def __init__(self, func, args, kwargs):
>          wx.PyEvent.__init__(self)
>          self.SetEventType(wxEVT_INVOKE)
>          self.__func = func
>          self.__args = args
>          self.__kwargs = kwargs
> 
>      def invoke(self):
>          self.__func(*self.__args, **self.__kwargs)
> 
> class MyFrame(wx.Frame):
>      def __init__(self, *args, **kwargs):
>          wx.Frame.__init__(self, *args, **kwargs)
>          self.Connect(-1, -1, wxEVT_INVOKE, self.onInvoke)
> 
>      def onInvoke(self, evt):
>          evt.invoke()
> 
>      def invokeLater(self, func, *args, **kwargs):
>          self.GetEventHandler().AddPendingEvent(InvokeEvent(func, args, 
> kwargs))
> 
> # end code
> 
> This way, if frm is an instance of MyFrame, invoking 
> frm.invokeLater(somecallable, arguments...) will invoke 'somecallable' 
> with the specified arguments in the main GUI thread.
> 
> I found this idiom somewhere on the Web and can't remember where.
> 
> HTH
> -- 
> http://mail.python.org/mailman/listinfo/python-list



More information about the Python-list mailing list