FigureCanvas не интерпретируется как QtWidget после использования PyInstaller - PullRequest
0 голосов
/ 17 мая 2019

У меня есть слегка измененная версия этого примера из 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, кто-нибудь знает способ решить эту проблему?

...