[PyKDE] Auto-connecting Slots

Andreas Pakulat apaku at gmx.de
Fri Jan 27 23:45:00 GMT 2006


On 27.01.06 22:46:29, Phil Thompson wrote:
> On Friday 27 January 2006 8:10 pm, Patrick K. O'Brien wrote:
> > Phil Thompson wrote:
> > > Tonight's PyQt4 snapshot implements Torsten's suggestion for using a
> > > decorator to control which signal/slot connections are made when pyuic4
> > > auto-connects.
> > >
> > > The problem is best demonstrated by QSpinBox which emits
> > > valueChanged(QString) and valueChanged(int). Defining an auto-connect
> > > method
> > > on_spinbox_valueChanged means that the method is connected to both
> > > signals and so gets invoked twice. Until now the method had to look at
> > > the type of the argument and just return if it was the one it didn't
> > > want.
> > >
> > > The QtCore.signature() decorator takes a single argument which is, in
> > > effect, the C++ signature of the method which tells the auto-connect code
> > > which signal to connect. For example...
> > >
> > >     @QtCore.signature("on_spinbox_valueChanged(int)")
> > >     def on_spinbox_valueChanged(self, value):
> > >         # value will only ever be an integer.
> >
> > Any chance we could get an easier syntax, such as:
> >
> >     @qtsig(int)
> >     def on_spinbox_valueChanged(self, value):
> 
> I want to keep it generic in case some other uses pop up.
> 
> At the very least your example would have to be @QtCore.qtsig("int")

Now I know near to nothing about signatures thus I have to ask:

The signature would always sit right in front of the function
definition? 

If yes than I guess the short version might be ok when it is documented
good (not just a comment with some example, at least when the first
version is released). 

If you can put the signature somewhere else (which I doubt currently),
then the longer version would IMHO be better as you can directly see
which slot is meant. 

BTW: Will this also solve "issues" like the clicked()-signal from
QAbstractButton? So I could do 
@QtCore.signature("on_mybutton_clicked()")
def on_mybutton_clicked(self):
and I would get only the call when checked is None and not the 2nd?

Andreas

-- 
Best of all is never to have been born.  Second best is to die soon.




More information about the PyQt mailing list