On Fri, Dec 12, 2008 at 10:28 PM, Giovanni Bajo <[email protected]> wrote:
> On 12/12/2008 11:18 PM, Paul A. Giannaros wrote:
>>
>> On Fri, Dec 12, 2008 at 6:27 PM, Phil Thompson
>> <[email protected]> wrote:
>>>
>>> On Fri, 12 Dec 2008 18:09:56 +0000, "Paul A. Giannaros"
>>> <[email protected]> wrote:
>>>>
>>>> Hi all,
>>>>
>>>> When there was a discussion regarding PyQt wishes for Python 3.0 I
>>>> proposed changing the mechanism by which you refer to symbols[1] .
>>>> Thus something like "QtGui.QApplication" could be refered to as
>>>> "Qt.Application".
>>>> As Qt does not use namespaces itself, there would be no conflicts of
>>>> names. The idea is that you'd then import any module and its symbols
>>>> would then be added to the Qt namespace when you've done so. This
>>>> system would therefore save on redundant typing while sidestepping
>>>> namespace pollution.
>>>>
>>>> Any thoughts on this?
>>>
>>> Nothing printable ;)
>>>
>>> You can already do Qt.QApplication is you really want to, so you are
>>> saving
>>> yourself one character.
>>
>> "from PyQt4 import Qt" imports every module if I'm not mistaken.
>> Wanting a sane way of referencing Qt's symbols is not the same as
>> wanting every symbol from every module to be imported.
>
> How is it possible to implement your proposal without importing every module
> at the same time, and without playing magic tricks?
>
>> Surely losing that one character is great if it's unnecessary. The
>> QtRuby guys seem to use exactly the same naming system that I propose
>> and it works fine for them and looks much better.
>
> In the number-of-character race, I win with star-imports:
>
> from PyQt4.QtCore import *
> from PyQt4.QtGui import *
>
> w = QWidget()
>
> Since 99.999% of the names in there starts with "Q", I never ever have a
> conflict. The code is easy on the eye, and resembles its C++ equivalent.

Way out, I'm afraid. ~60% of QtCore symbols start with a "Q", and a
further ~21% start with a "q". That still leaves around 32 symbols
(16%) once you weed out __doc__ etc. Some have ridiculously common
names ("center", "flush", "bin"), and some conflict with basic Python
builtins ("hex" and "oct"). QtGui is much better but still has a
"Display" class.
Anyways, I believe I've seen it mentioned on this list that "import *"
with PyQt method is frowned upon.

So you in summary, one can either:
 * List each class on importing
 * Import a module and use the "QtCore.QCoreApplication" form
 * Pollute the namespace
 * Load all Qt modules

None of those are particularly appealing. I currently use "import *",
but thought it'd be great to dodge this altogether.


> Doh, so you're proposing that importing a module has the side effect of
> populating a different namespace. This is absolutely implicit and
> counter-intuitive, and has no equivalent in the standard library nor any
> external library I can think of.

No, my proposal is dropping the leading Q and using a Qt namespace
that doesn't require loading all modules. That way does seem
particularly odd, though. Perhaps a less counter-intuitive method
would be something like

from pyqt4 import Qt
Qt.load('core', 'gui', 'svg')

?

On Fri, Dec 12, 2008 at 10:44 PM, Phil Thompson
<[email protected]> wrote:
>>> A class in PyQt should have the same name as the class in Qt if at all
>>> possible.
>>
>> Could you please elaborate as to why?
>
> Least surprise. Consistency with existing documentation. Common sense.

Least surprise is important, but do you think any programmers coming
from a Qt/C++ background would be seriously distracted by it?
The second strikes me as an incredibly minor issue.
The third I'd dispute as another project pretty similar to PyQt uses it.
_______________________________________________
PyQt mailing list    [email protected]
http://www.riverbankcomputing.com/mailman/listinfo/pyqt

Reply via email to