【问题标题】:No name 'QApplication' in module 'PyQt5.QtWidgets' error in PylintPylint 中的模块“PyQt5.QtWidgets”错误中没有名称“QApplication”
【发布时间】:2019-11-05 16:06:06
【问题描述】:

在尝试学习 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 专家,所以我不能指出确切的方法,但如果是一个起点。

标签: python python-3.x visual-studio-code pyqt5 pylint


【解决方案1】:

我可以在 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 模块作为一个整体导入,而不是在其中定义的单个类对象。

【讨论】:

  • 谢谢约翰,感谢您在您的机器上复制此内容。我一直在网上搜索,找到了一个可行的解决方案,也将其发布在这里。
【解决方案2】:

我已经解决了这个问题,显然是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,现在一切正常
【解决方案3】:

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

my_app = QtWidgets.QApplication(sys.argv)

并且不要PyQt5导入QApplication

在 PyQt5 中测试!

【讨论】:

    【解决方案4】:

    正如@wolfeyes90 here 所建议的那样 在项目的根目录下创建一个名为.pylintrc的文件,内容为:

    extension-pkg-whitelist=PyQt5
    

    【讨论】:

    • 有帮助,但您不能只是“创建一个 .pylintrc 并将该行放入”作为整个文件 (configparser.MissingSectionHeaderError: File contains no section headers.)。您需要运行pylint --generate-rcfile > .pylintrc 然后对其进行编辑,在[MASTER] 部分中查找extension-pkg-whitelist=
    【解决方案5】:

    我认为删除包导入错误的最简单方法是通过 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",
    【解决方案6】:

    也许这个关于 PyQt5 安装的错误

    【讨论】:

    • 是的,但这不是问题的答案
    【解决方案7】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-07-26
      • 1970-01-01
      • 1970-01-01
      • 2019-08-06
      • 2014-11-07
      • 2023-02-06
      相关资源
      最近更新 更多