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

时间:2019-06-23 18:08:47

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

在VS Code中尝试学习PyQt5时遇到此问题,“ 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中运行。任何帮助或建议表示赞赏。

7 个答案:

答案 0 :(得分:9)

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

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

如果要添加多个软件包,只需将第一个软件包添加,并用逗号分隔即可,如下所示:

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:2)

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

答案 3 :(得分:1)

我可以在Windows 10(Python 3.7.3,PyQt 5.11.3,PyLint 2.3.1)的Visual Studio代码中重现PyLint错误。正如问题所表明的那样,尽管这并不能阻止我运行代码。

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

var arr = [
    'FOO_BAR_A_WRITE_SELF',
    'FOO_BAR_A',
    'FOO_BAR_A_READ_SELF',
    'FOO_BAR_A_READ_ALL',
    'FOO_BAR_A_WRITE_ALL',
    'FOO_BAR_B_READ_SELF',
    'FOO_BAR_B_WRITE_SELF',
    'FOO_BAR_B',
    'FOO_BAR_B_READ_ALL',
    'FOO_BAR_B_WRITE_ALL'
];

const onRWorder=s=>{
  let x = s.replace('_WRITE_','_')
  if (x != s) x += '_WRITE'
  else {
    x = s.replace('_READ_','_')
    if (x!= s) x += '_READ'
  }
  return x
}

arr.sort(function(a, b){
  let a1 = onRWorder(a)
  let b1 = onRWorder(b)
  if(a1 < b1) { return -1 }
  if(a1 > b1) { return 1 }
  return 0
})

for (let z of arr) console.log(z)

显着的区别是此代码将.as-console-wrapper { max-height: 100% !important }模块作为一个整体导入,而不是其中定义的单个类对象。

答案 4 :(得分:1)

我发现一个解决方案很简单,只需以这种方式使用QApplication:

my_app = QtWidgets.QApplication(sys.argv)

QApplication导入PyQt5

已在PyQt5中测试!

答案 5 :(得分:0)

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

extension-pkg-whitelist=PyQt5

答案 6 :(得分:-3)

也许是有关PyQt5安装的错误