[PyKDE] Auto-connecting Slots

Phil Thompson phil at riverbankcomputing.co.uk
Sat Jan 28 10:06:36 GMT 2006


On Friday 27 January 2006 11:45 pm, Andreas Pakulat wrote:
> 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?

Yes.

> 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?

Yes.

Phil




More information about the PyQt mailing list