Pylint 模块 'PyQt5.QtWidgets' 中没有名称 'QApplication' 错误

No name 'QApplication' in module 'PyQt5.QtWidgets' error in Pylint

运行 在尝试学习 PyQt5 时在 VS Code 中遇到这个问题,"No name 'QApplication' in module 'PyQt5.QtWidgets'","No name 'QWidget' in module 'PyQt5.QtWidgets'""。

我不确定这是 pylint 问题还是其他问题。我已经确认 PyQt5 是用 pip3 list 安装的,但我似乎无法弄清楚这个问题。

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 中进行 运行 操作。任何帮助或建议表示赞赏。

我可以在 Windows 10(Python 3.7.3、PyQt 5.11.3、PyLint 2.3.1)上重现 Visual Studio 代码中的 PyLint 错误。虽然它不会阻止我 运行 代码,正如问题所暗示的那样。

这肯定是 linter 的问题,而不是 PyQt5 安装或其他任何问题,因为 PyLint 在将代码更改为以下等效代码时停止抱怨:

from PyQt5 import QtWidgets

app = QtWidgets.QApplication([])
window = QtWidgets.QWidget()
window.setWindowTitle("Test")
window.show()
app.exec_()

显着的区别在于此代码将 QtWidgets 模块作为一个整体导入,而不是其中定义的单个 class 对象。

我已经解决了这个问题,显然 Pylint doesn't load any C extensions by default, because those can run arbitrary code. 所以我发现如果你在你的项目目录中创建一个名为 .pylintrc 的系统文件,rc 文件可以将这个包列入白名单通过在 rc 文件 extension-pkg-whitelist=PyQt5 中添加以下代码来停止抛出错误。所以本质上问题不在于 PyQt5,而是 linter 因这个而抛出错误错误。

我找到了一个简单的解决方案,只需这样使用 QApplication:

my_app = QtWidgets.QApplication(sys.argv)

PyQt5导入QApplication

已在 PyQt5 中测试!

来自@wolfeyes90 的建议 在名为 .pylintrc 的项目根目录中创建一个文件,内容为:

extension-pkg-whitelist=PyQt5

我认为消除包导入错误的最简单方法是通过 Ctrl+Shift+P 进入 vscode 的 JSON 设置,搜索 "settings" 并选择 Preferences: Open Settings (JSON) 并将此行添加到字典中:

"python.linting.pylintArgs": ["--extension-pkg-whitelist=PyQt5"]

如果要添加多个包,只需添加第一个,用逗号分隔,如下所示:

"python.linting.pylintArgs": ["--extension-pkg-whitelist=PyQt5,otherPkg"]

可能是关于 PyQt5 安装的错误

如果您使用 VSCode,请转到“文件”>“参考”>“设置”> 单击左上角的此图标: (将打开“settings.json”文件)> 将这些行添加到“settings.json”:

{
    "python.linting.pylintArgs": [
        "--extension-pkg-whitelist=PyQt5"
    ]
}

试试这个

{
"python.linting.pylintArgs": ["--extension-pkg-whitelist=PyQt5"]
}