[PyKDE] Auto-connecting Slots
gerard.vermeulen at grenoble.cnrs.fr
Sat Jan 28 13:40:09 GMT 2006
On Sat, 28 Jan 2006 11:57:00 +0000
Phil Thompson <phil at riverbankcomputing.co.uk> wrote:
> 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
dir(QtCore) shows that it contains other Qt names which are not prefixed
with 'q' or 'Q'. IMO, those names serve to make Qt streams feel like the
standard C++ streams.
The risk that TT will pollute the C++ global namespace with other names not
prefixed by 'q' or 'Q' looks rather low.
signature() has a clear meaning, the pyqt prefix is arbitrary (PYQT_ is an
existing prefix) and tries to fix something which will very likely never break.
PS: I agree with Giovanni that the explicit QtModule.-style is way too verbose
Two of my fingers are already showing RSI symptoms and it is hard to keep code
within a 80 character line length).
'import PyQt4.QtCore as qt' is a partial solution.
More information about the PyQt