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

11
wolfeyes90 23 Июн 2019 в 21:08

4 ответа

Лучший ответ

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

11
wolfeyes90 23 Июн 2019 в 23:18

В соответствии с предложением @ wolfeyes90 здесь Создайте файл в корневом каталоге проекта с именем .pylintrc с содержимым:

extension-pkg-whitelist=PyQt5
0
Tadeu Sampaio 4 Ноя 2019 в 11:13

Я нашел решение легко, просто используйте QApplication следующим образом:

my_app = QtWidgets.QApplication(sys.argv)

И не импортировать QApplication из PyQt5.

Протестировано в PyQt5!

1
Adrian Mole 2 Окт 2019 в 06:47

Я могу воспроизвести ошибки 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 целиком, а не отдельные объекты класса, определенные в нем.

2
anon 23 Июн 2019 в 23:18