Нет имени «QApplication» в модуле «PyQt5.QtWidgets» ошибка в Pylint - PullRequest
0 голосов
/ 23 июня 2019

Обнаружение этой проблемы в VS Code при попытке изучить PyQt5, «Без имени« QApplication »в модуле« PyQt5.QtWidgets »», «Без имени« QWidget »в модуле« PyQt5.QtWidgets »».

Я не уверен, что это проблема с 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. Любая помощь или предложения приветствуются.

Ответы [ 2 ]

2 голосов
/ 24 июня 2019

Я выяснил проблему, по-видимому, Pylint doesn't load any C extensions by default, because those can run arbitrary code. Итак, я обнаружил, что если вы создаете системный файл в каталоге вашего проекта с файлом с именем .pylintrc, файл rc может внести в белый список этот пакет, чтобы прекратить выдавать ошибки, добавив следующий код в файле rc extension-pkg-whitelist=PyQt5. Так что, по сути, проблема не в PyQt5, а в том, что линтер выдавал ложные ошибки из-за этого.

1 голос
/ 24 июня 2019

Я могу воспроизвести ошибки PyLint в коде Visual Studio в Windows 10 (Python 3.7.3, PyQt 5.11.3, PyLint 2.3.1). Хотя это не мешает мне запускать код, как предполагает вопрос.

Это, безусловно, проблема с линтером, а не с установкой PyQt5 или чем-то еще, так как PyLint перестает жаловаться при изменении кода на следующий эквивалент:

from PyQt5 import QtWidgets

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

Заметным отличием является то, что этот код импортирует модуль QtWidgets в целом, а не отдельные объекты класса, определенные в нем.

...