Pylint 中的模块“PyQt5.QtWidgets”错误中没有名称“QApplication”
Posted
技术标签:
【中文标题】Pylint 中的模块“PyQt5.QtWidgets”错误中没有名称“QApplication”【英文标题】:No name 'QApplication' in module 'PyQt5.QtWidgets' error in Pylint 【发布时间】:2019-06-23 18:08:47 【问题描述】:在尝试学习 PyQt5 时在 VS Code 中遇到此问题,“模块 'PyQt5.QtWidgets' 中没有名称 'QApplication'”,“模块 'PyQt5.QtWidgets' 中没有名称 'QWidget'”。
我不确定这是 pylint 问题还是其他问题。我已经确认 PyQt5 安装了 pip3 列表,但我似乎无法找出问题所在。
import sys
from PyQt5.QtWidgets import QApplication, QWidget
def app():
my_app = QApplication(sys.argv)
w = QWidget()
w.setWindowTitle("Test")
w.show()
sys.exit(my_app.exec_())
app()
我希望这个错误不会继续显示,但它会阻止我在 VS Code 中运行东西。任何帮助或建议表示赞赏。
【问题讨论】:
Mac OS 添加到此。 错别字,把w = QtWidget()
改成w = QWidget()
并加上sys.exit(my_app.exec_())
谢谢,错字修复了其中一个问题,不幸的是,另外两个仍然存在 No name 'QApplication' in module 'PyQt5.QtWidgets'
和 No name 'QWidget' in module 'PyQt5.QtWidgets'
@wolfeyes90 1) 如果它是一个不会导致您在此处询问的错误的错字,那么它会更正您显示的代码以避免混淆。 2) 你用的是什么版本的 Python3?什么版本的 PyQt5?你是如何安装 PyQt5 的?
@wolfeyes90 我没有说这是解决方案,我只是指出您纠正了该部分以避免混淆。另一方面,正如您指出 PyQt5 是 Qt 的绑定,它是用 C++ 编写的,会产生这些问题,但是对于这些情况,存在存根,并且在它已经提供的最新版本中,也许您的 IDE 未配置为使用它们,我不是 VS Code 专家,所以我不能指出确切的方法,但如果是一个起点。
【参考方案1】:
我已经解决了这个问题,显然是Pylint doesn't load any C extensions by default, because those can run arbitrary code.
所以我发现如果您在项目目录中使用名为.pylintrc
的文件创建一个系统文件,则rc 文件可以将此包列入白名单以通过添加rc 文件extension-pkg-whitelist=PyQt5
中的以下代码。所以本质上问题不是 PyQt5,而是由于这个原因导致的 linter 抛出错误错误。
【讨论】:
不错的发现!对我很有帮助 有帮助,但您不能只是“创建一个 .pylintrc 并将该行放入”作为整个文件 (configparser.MissingSectionHeaderError: File contains no section headers.
)。您需要运行pylint --generate-rcfile > .pylintrc
然后对其进行编辑,在[MASTER]
部分中查找extension-pkg-whitelist=
也许你的设置有点不同,我只是用touch .pylintrc
来创建文件并添加上面的扩展白名单代码。无论哪种方式,感谢分享,我相信这会帮助其他人解决我上述解决方案不适用的问题。
@wolfeyes90 不,您的设置没有什么不同,但您的解决方案可能很糟糕。您应该使用默认值创建一个 .pylintrc 文件,而不是一个空文件。
我遇到了同样的问题,ALE vim 插件无法识别某些模块,我以为是插件的原因,但后来生成了 rcfile,现在一切正常【参考方案2】:
我认为删除包导入错误的最简单方法是通过 Ctrl+Shift+P 进入 vscode 的 JSON 设置,搜索“设置”并选择 Preferences: Open Settings (JSON)
并将此行添加到字典中:
"python.linting.pylintArgs": ["--extension-pkg-whitelist=PyQt5"]
如果要添加多个包,只需添加第一个,用逗号分隔,如下所示:
"python.linting.pylintArgs": ["--extension-pkg-whitelist=PyQt5,otherPkg"]
【讨论】:
我发现 PyQt5 和 PySide2 之间存在冲突。即使在上面添加了一行之后,我也看到了这个错误。我刚刚删除了这一行,问题就解决了:"--extension-pkg-whitelist=PySide2",
【参考方案3】:
我找到了一个简单的解决方案,只需以这种方式使用 QApplication:
my_app = QtWidgets.QApplication(sys.argv)
并且不要从PyQt5
导入QApplication
。
在 PyQt5 中测试!
【讨论】:
【参考方案4】:我可以在 Windows 10(Python 3.7.3、PyQt 5.11.3、PyLint 2.3.1)上的 Visual Studio Code 中重现 PyLint 错误。尽管正如问题所暗示的那样,它并没有阻止我运行代码。
这肯定是 linter 的问题,而不是 PyQt5 安装或其他任何东西,因为 PyLint 在将代码更改为以下等效项时停止抱怨:
from PyQt5 import QtWidgets
app = QtWidgets.QApplication([])
window = QtWidgets.QWidget()
window.setWindowTitle("Test")
window.show()
app.exec_()
显着的区别在于此代码将QtWidgets
模块作为一个整体导入,而不是在其中定义的单个类对象。
【讨论】:
谢谢约翰,感谢您在您的机器上复制此内容。我一直在网上搜索,找到了一个可行的解决方案,也将其发布在这里。【参考方案5】:如果您使用 VSCode,请转到“文件”>“参考”>“设置”>单击左上角的此图标: (将打开“settings.json”文件)> 将这些行添加到“settings.json”:
"python.linting.pylintArgs": [
"--extension-pkg-whitelist=PyQt5"
]
【讨论】:
【参考方案6】:正如@wolfeyes90 here 所建议的那样
在项目的根目录下创建一个名为.pylintrc
的文件,内容为:
extension-pkg-whitelist=PyQt5
【讨论】:
有帮助,但您不能只是“创建一个 .pylintrc 并将该行放入”作为整个文件 (configparser.MissingSectionHeaderError: File contains no section headers.
)。您需要运行pylint --generate-rcfile > .pylintrc
然后对其进行编辑,在[MASTER]
部分中查找extension-pkg-whitelist=
【参考方案7】:
试试这个
"python.linting.pylintArgs": ["--extension-pkg-whitelist=PyQt5"]
【讨论】:
您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。【参考方案8】:也许这个关于 PyQt5 安装的错误
【讨论】:
是的,但这不是问题的答案以上是关于Pylint 中的模块“PyQt5.QtWidgets”错误中没有名称“QApplication”的主要内容,如果未能解决你的问题,请参考以下文章
Pylint 中的模块“PyQt5.QtWidgets”错误中没有名称“QApplication”