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

wol*_*s90 2 python pylint python-3.x pyqt5 visual-studio-code

尝试学习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()
Run Code Online (Sandbox Code Playgroud)

我希望这个错误不会一直显示,但是会阻止我在VS Code中运行。任何帮助或建议表示赞赏。

use*_*087 16

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

"python.linting.pylintArgs": ["--extension-pkg-whitelist=PyQt5"]
Run Code Online (Sandbox Code Playgroud)

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

"python.linting.pylintArgs": ["--extension-pkg-whitelist=PyQt5,otherPkg"]
Run Code Online (Sandbox Code Playgroud)


wol*_*s90 8

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

  • 有帮助,但您不能只是“创建 .pylintrc 并将该行放入”作为整个文件(“configparser.MissingSectionHeaderError:文件不包含节标题。”)。您需要运行“pylint --generate-rcfile > .pylintrc”,然后编辑它,在“[MASTER]”部分中查找“extension-pkg-whitelist=” (11认同)

小智 7

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

my_app = QtWidgets.QApplication(sys.argv)
Run Code Online (Sandbox Code Playgroud)

并且不导入QApplication从PyQt5。

在 PyQt5 中测试!


ano*_*non 5

我可以在 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_()
Run Code Online (Sandbox Code Playgroud)

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