У меня есть слегка измененная версия этого примера из matplotlib: https://matplotlib.org/gallery/user_interfaces/embedding_in_qt_sgskip.html
Единственное, что изменилось - это импорт, так как я использую PySide2, поэтому импорт выглядит так:
from PySide2 import QtCore, QtWidgets
from matplotlib.backends.backend_qt5agg import (FigureCanvasQTAgg as FigureCanvas, NavigationToolbar2QT as NavigationToolbar)
from matplotlib.figure import Figure
Это нормально работает при запуске кода в pycharm или при запуске самих скриптов, однако после того, как .exe создан с помощью PyInstaller, я получаю следующую ошибку:
TypeError: 'PySide2.QtWidgets.QBoxLayout.addWidget' called with wrong argument types:
PySide2.QtWidgets.QBoxLayout.addWidget(FigureCanvasQTAgg)
Supported signatures:
PySide2.QtWidgets.QBoxLayout.addWidget(PySide2.QtWidgets.QWidget, int=0,
PySide2.QtCore.Qt.Alignment=Default(Qt.Alignment))
PySide2.QtWidgets.QBoxLayout.addWidget(PySide2.QtWidgets.QWidget)
Похоже, что FigureCanvasQtAgg больше не распознается как QWidget, поэтому его нельзя добавить в макет.
Я попытался добавить эти строки, чтобы предложить pyside, как предлагалось здесь :
os.environ["QT_API"] = "PySide2"
matplotlib.use('Qt5Agg')
matplotlib.rcParams['backend.qt5']='PySide2'
Однако это не меняет сообщение об ошибке exe. В pycharm он все еще работает нормально.
РЕДАКТИРОВАТЬ: Кажется, это некоторая проблема с PySide2 + PyInstaller , после замены этой строки:
from PySide2 import QtCore, QtWidgets
с этой строкой:
from PyQt5 import QtCore, QtWidgets
Работает даже после использования PyInstaller.
Но я хочу использовать PySide2 вместо PyQt5, кто-нибудь знает способ решить эту проблему?