我是新手,刚开始学习 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/