我从 matplotlib 中对此示例进行了稍微修改的版本:https://matplotlib.org/gallery/user_interfaces/embedding_in_qt_sgskip.html 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 中运行代码或单独运行脚本时,这工作正常,但是在使用 PyInstaller 创建 .exe 后,我收到以下错误:
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,因此无法将其添加到布局中。
我尝试添加这些行以按照建议建议 pysidehere https://stackoverflow.com/questions/6723527/getting-pyside-to-work-with-matplotlib/8292957:
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,有人知道解决这个问题的方法吗?