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”

Python - 使用Pylint检查分析代码

如何让 pylint 识别 MySQLdb 成员?

Visual Studio Code 中的 Pylint“未解决的导入”错误

pylint

pylint & jenkins