如何从Qt::namespase(Qt5,Python3.x)导入?

2024-09-28 22:19:12 发布

您现在位置:Python中文网/ 问答频道 /正文

对于我的应用程序,我需要设置一些小部件参数,比如alignment(Qt::AlignBottom)和其他参数。但是我不能导入它们(其他PyQt5的导入没有任何问题)。在

使用此代码

from PyQt5 import Qt

progressBar = QProgressBar(splash)
progressBar.setAlignment(Qt.AlignBottom)

我得到了以下错误:

^{pr2}$

使用这个方法可以:

from PyQt5.Qt import *

progressBar = QProgressBar(splash)
progressBar.setAlignment(Qt.AlignBottom)

虽然我有一个有效的解决方案,但我只想导入Qt.AlignBottom,而不是{}。另外,为什么Qt.AlignBottom不能与{}一起工作呢?在


Tags: 代码fromimport应用程序参数部件错误qt
2条回答

我认为这里的混淆是PyQt有一个特殊的虚拟模块,名为Qt,它将所有的导入到单个名称空间中。这是一个非常有用的特性,但是它与QtCore.Qt的名称冲突没有避免,这是一个真正的遗憾。在

在第一个示例中,可以通过使用看起来有些奇怪的Qt.Qt.AlignBottom来“修复”错误。但显然,从QtCore显式导入是一个更好的解决方案。还值得注意的是,PyQt5包是一个延迟加载程序,因此import PyQt5将只导入一个空的命名空间,而不能访问其他模块。在

你能做到的

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

不能导入AlignBottom,因为QtCore本身不是一个包,它只是它自己的一个模块(单个文件)。要知道所有包都是模块,但并非所有模块都是包

所以这行不通

^{pr2}$

查看输出,您可以看到QtCore是一个单独的文件,其中包含一个类Qt,该类包含{}所属的其他类和方法,您可以使用。在

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

另一方面,PyQt5是一个包(包含其他模块的文件夹)指向它的__init__.py

我建议你读一下关于模块的docs和这个SO问题

相关问题 更多 >