[PyKDE] Auto-connecting Slots

Phil Thompson phil at riverbankcomputing.co.uk
Sat Jan 28 11:57:00 GMT 2006


On Saturday 28 January 2006 11:29 am, Giovanni Bajo wrote:
> Phil Thompson <phil at riverbankcomputing.co.uk> wrote:
> >>> 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.
> >>
> >> Notice that naming it "signature" is a namespace violation from
> >> those using "from QtCore import *". OTOH, you shouldn't impose this
> >> code style of prefixing each and every name with the QtModule name:
> >> I personally hate it, and I can't see why Python code should get 3
> >> times more verbose than the corresponding C++ code. Having 'Q' at
> >> the beginning of the word is enough namespace for me and for every
> >> C++ Qt project out there. Specifically, Qt itself does not expose
> >> anything but symbols which begins with "Q" (or fullly-uppercase
> >> macros and similar things).
> >>
> >> I'd really prefer to have it named something like "qtsignature".
> >
> > A decorator is just a function and needs to reside in a namespace.
> > While I could put the signature() function in the global namespace,
> > that would be dumb.
>
> You can put it within the QtCore namespace, but please consider that many
> people *will* use "from QtCore import *", as it's the default way to make
> the code similar to the C++ counterpart. If Trolltech added a "signature()"
> function, people would complain. Trolltech doesn't use standard C++
> namespaces, but they have their own namespace: they prefix every class name
> with uppercase Q, and every function name with lowercase q. This is why I
> think PyQt is going the wrong way if it starts suggesting to explicitally
> use QtCore before everything and/or makes it harder for people to use the
> "from QtCore import *" form.
>
> So, if you're going to add a PyQt-specific name, please make it follow the
> Trolltech's convention. QtCore.qSignature would surely be better (there are
> pre cedence of global functions named qFooBar in Qt's API).

Trolltech are much more likely to add a function called qSignature() than one 
called signature(). Isn't calling it pyqtSignature() the safest and most 
consistent?

Phil




More information about the PyQt mailing list