How to import from Qt:: namespase (Qt5, Python3.x)?

I think the confusion here is that PyQt has a special virtual module called Qt, which imports everything into a single namespace. This is a quite useful feature, but it's a real shame that the name clash with QtCore.Qt wasn't avoided.

In the first example, the error can be "fixed" by using the somewhat weird-looking Qt.Qt.AlignBottom. But obviously, explicitly importing from QtCore is a much better solution. It's also worth noting that the PyQt5 package is a lazy loader, so import PyQt5 will just import an empty namespace with no access to the other modules.


You can do this

>>> from PyQt5.QtCore import Qt
>>> Qt.AlignBottom
64
>>>

You can't import AlignBottom only because QtCore is not a package itself, it's just a module on it's own (a single file). it's important to know that all packages are modules, but not all modules are packages

so this won't work

import PyQt5.QtCore.Qt

ImportError: No module named 'PyQt5.QtCore.Qt'; 'PyQt5.QtCore' is not a package
>>> import PyQt5.QtCore
>>> QtCore
<module 'PyQt5.QtCore' from '/usr/lib/python3.5/site-packages/PyQt5/QtCore.so'>
>>> import PyQt5
>>> PyQt5
<module 'PyQt5' from '/usr/lib/python3.5/site-packages/PyQt5/__init__.py'>
>>>

Looking at the output you can see that QtCore is a single file which contains a class Qt that contains other classes and methods on which AlignBottom is part of, you can see that with.

>>> from PyQt5.QtCore import Qt
>>> help(Qt)

On the otherhand PyQt5 is a package (folder containing other modules) points to it's __init__.py

i'll suggest you read the docs on Modules and this SO question