[PyKDE] Auto-connecting Slots
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
> 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
> def on_mybutton_clicked(self):
> and I would get only the call when checked is None and not the 2nd?
More information about the PyQt