python - 为什么在 python 中没有导入就失败了

标签 python import pyqt5 qtwidgets

我是新手,刚开始学习 Python 编程:

import sys
from PyQt5 import QtWidgets

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)

    mainWindow = QtWidgets.QMainWindow()
    mainWindow.show()

    sys.exit(app.exec_())

当我运行上面的代码时,一切正常。但是当我运行下面的代码时,它失败并显示以下错误消息:app = PyQt5.QtWidgets.QApplication(sys.argv) AttributeError: 'module' 对象没有属性 'QtWidgets'

import sys
import PyQt5
if __name__ == "__main__":
    app = PyQt5.QtWidgets.QApplication(sys.argv)

    mainWindow = PyQt5.Qtwidgets.QmainWindow()
    mainWindow.show()

    sys.exit(app.exec_())

顺便说一句,我的Python版本是2.7,我使用的是Qt5库,我的操作系统是OpenSUSE 13.2,当然是Linux的一个发行版。

最佳答案

PyQt5 部分只是为一组模块提供了一个命名空间。它本身不包含任何内容,因此您不能直接从中导入任何内容。

这是一个深思熟虑的设计决定,这样做是有充分理由的。包中可能总共有三十个或更多模块,因此每次导入 PyQt5 时加载它们全部 将是一笔沉重的前期成本。因此,我们的目的是只支付加载您实际需要的模块的费用。

但是,有时您确实想要一次加载所有模块。例如,在 python 交互式 session 中进行实验时,能够非常方便地执行此操作。事实上,PyQt 提供了一个特殊的模块来做这件事:

>>> from PyQt5 import Qt
>>> Qt.QWidget
<class 'PyQt5.QtWidgets.QWidget'>
>>> Qt.QObject
<class 'PyQt5.QtCore.QObject'>
>>> Qt.QNetworkCookie
<class 'PyQt5.QtNetwork.QNetworkCookie'>

关于python - 为什么在 python 中没有导入就失败了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29109425/

相关文章:

python - 圆形 QGraphicsView

python - QSortFilterProxyModel 返回人工行

javascript - 从哪里导入js文件比较好?

python - 导入 matplotlib._png 失败

python - 将滚动条添加到选项卡 PYQT5

python - 无法在 QML TableView 中显示来自 QSqlQueryModel 的数据

python - numpy 中的 matlab isempty() 函数?

python - 详细 View 中的 Django 管理操作?

python - 需要帮助格式化 .txt 文件并将其放入数据框中

import - python readline 模块不适用于 Windows?