Не удается импортировать PyQt5 во встроенный Python - PullRequest
0 голосов
/ 04 ноября 2019

Я использую pybind11 (2.4.2) в моем приложении c ++ для встроенной работы графического интерфейса. Однако импорт PyQt5, в частности, не выполняется.

При запуске сценария с использованием консоли с python script.py все работает нормально. Запуск из c ++ Python API (pybind11) не работает, выводит сообщение об ошибке NameError: name 'QtWidgets' is not defined, хотя словарь импорта ясно показывает, что QtWidgets есть: [..., 'PyQt5.QtGui', 'PyQt5.QtWidgets', 'PyQt5.uic', ...]

from PyQt5 import QtWidgets, uic
from PyQt5.QtCore import QTimer
import numpy as np
import pyqtgraph as pg
import functools

Только запускscript.py без явного ключевого слова python в консоли выводит ту же ошибку. Я проверил Windows PATH, и у меня там только одна версия Python. Серверная часть c ++ создается вместе с Visual Studio вместе с pybind11.

Я подозреваю, что это как-то связано со средой, которую я использую, но я не могу понять это.

РЕДАКТИРОВАТЬ:

Это код, который я пытался запустить, который поднял NameError: name 'QtWidgets' is not defined, запускается из Visual Studio с pybind11 (v2.4.2):

from PyQt5 import QtWidgets, uic
from PyQt5.QtCore import QTimer
import numpy as np
import pyqtgraph as pg
import functools

sys.stderr.write('Python version: {}\n' .format(platform.python_version())) # 3.7.5
sys.stderr.write('Arch: {}\n' .format(struct.calcsize("P") * 8)) # 32
sys.stderr.write('Executable location: {}\n' .format(sys.executable)) # Exe location
sys.stderr.write('System path: {}\n' .format(sys.path))

class MainWindow(QtWidgets.QMainWindow):

    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)

        #Load the UI Page
        uic.loadUi('mainwindow.ui', self)

        x = np.random.normal(size=1000)
        y = np.random.normal(size=1000)

        self.button_start.clicked.connect(self.onClick)

        self.setup()
        self.plot(x, y)
        (...)

def main():
    app = QtWidgets.QApplication(sys.argv)
    main = MainWindow() # Error here -> NameError: name 'QtWidgets' is not defined
    main.show()
    sys.exit(app.exec_())

if __name__ == '__main__':         
    main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...