For my application, I need to set some widget parameters like alignment (Qt::AlignBottom
) and others. But I can't import them (other PyQt5 stuff imports without any issues).
Using this code
from PyQt5 import Qt
progressBar = QProgressBar(splash)
progressBar.setAlignment(Qt.AlignBottom)
I got the following error:
Traceback (most recent call last):
File "run_app.py", line 50, in <module>
runSemApp(sys.argv)
File "run_app.py", line 32, in runSemApp
progressBar.setAlignment(Qt.AlignBottom)
AttributeError: 'module' object has no attribute 'AlignBottom'
And using this one works:
from PyQt5.Qt import *
progressBar = QProgressBar(splash)
progressBar.setAlignment(Qt.AlignBottom)
Though I have a working solution, I would like to import only Qt.AlignBottom
and not *
. Also, why doesn't Qt.AlignBottom
work with from PyQt5 import Qt
?
Generally, you can install it using python -m pip install pyqt5 regarding your environment is set up correctly. If you haven't got the designer, you can use python -m pip install pyqt5-tools to install tools that contain the designer.
Enter the mainloop of application by app.Import QtCore, QtGui and QtWidgets modules from PyQt5 package. Create an application object of QApplication class. Add a QLabel object and set the caption of label as "hello world". Define the size and position of window by setGeometry() method.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With