对于我的应用程序,我需要设置一些小部件参数,例如对齐方式 (Qt::AlignBottom
) 等。但我无法导入它们(其他 PyQt5 内容导入没有任何问题)。
使用这段代码
from PyQt5 import Qt
progressBar = QProgressBar(splash)
progressBar.setAlignment(Qt.AlignBottom)
我收到以下错误:
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'
并且使用这个有效:
from PyQt5.Qt import *
progressBar = QProgressBar(splash)
progressBar.setAlignment(Qt.AlignBottom)
虽然我有一个可行的解决方案,但我只想导入 Qt.AlignBottom
而不是 *
。另外,为什么 Qt.AlignBottom
不能与 from PyQt5 import Qt
一起使用?
最佳答案
我认为这里的混淆是 PyQt 有一个名为 Qt
的特殊虚拟模块,它将所有内容 导入到单个 namespace 中。这是一个非常有用的功能,但遗憾的是未能避免名称与 QtCore.Qt
的冲突。
在第一个示例中,可以通过使用看起来有些奇怪的 Qt.Qt.AlignBottom
来“修复”错误。但显然,从 QtCore
显式导入是一个更好的解决方案。还值得注意的是,PyQt5
包是一个惰性加载程序,因此 import PyQt5
将只导入一个空命名空间,无法访问其他模块。
关于python - 如何从 Qt::namespase (Qt5, Python3.x) 导入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39316693/