[Pygui] signals and slots

Greg Ewing greg.ewing at canterbury.ac.nz
Mon Nov 30 01:03:59 CET 2009


inhahe wrote:
> it would be nice to see PyGUI turn into something like PyQt - but of
> course a lot lightweight and therefore probably with a simpler
> interface.. mainly what i like about PyQt is its signals and slots
> mechanism.

I'm not all that familiar with Qt, but my experiences with
gtk make me less than enthusiastic about the signal/slot
paradigm for event handling. I find it tedious having to
make a bunch of calls to plug in event handlers every time
I create a widget.

The PyGUI philosophy for event handling is that you don't
have to explicitly connect events, you just define a method
to handle the event at the appropriate point in the widget
hierarchy.

Having said that, an action property with a bound method
plugged into it is fairly similar to a Qt signal-slot
connection. The main difference is that you can't directly
connect more than one handler at a time. I haven't found
that to be much of a disadvantage in practice -- usually
my hander is a method of the containing Window or Dialog,
which is in a position to fire off whatever actions are
necessary.

> although if you don't provide one I hope that it would at least be
> possible to create identical support for it implemented purely in
> Python somehow.  i'm guessing that would be relatively easy just by
> creating a connect function that modifies action properties..

Yes, it wouldn't be too hard to create an adaptor that
you could plug into an action property. It would maintain
a list of handlers and have a __call__ method that passes
the call on to all of them.

Here's a quick sketch (untested):

   class ActionDistributor(list):

     def __call__(self, *args, **kwds):
       for handler in self:
         handler(*args, **kwds)

-- 
Greg



More information about the Pygui mailing list