bok*_*ing 5 python matplotlib pyside2
我对 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
Run Code Online (Sandbox Code Playgroud)
在 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)
Run Code Online (Sandbox Code Playgroud)
看来FigureCanvasQtAgg不再被识别为QWidget,因此无法将其添加到布局中。
我尝试添加这些行来建议 pyside,如下所示:
os.environ["QT_API"] = "PySide2"
matplotlib.use('Qt5Agg')
matplotlib.rcParams['backend.qt5']='PySide2'
Run Code Online (Sandbox Code Playgroud)
但是,这不会更改 exe 的错误消息。在pycharm中仍然运行良好。
编辑:替换此行后,这似乎是 PySide2+PyInstaller 的一些问题:
from PySide2 import QtCore, QtWidgets
Run Code Online (Sandbox Code Playgroud)
用这一行:
from PyQt5 import QtCore, QtWidgets
Run Code Online (Sandbox Code Playgroud)
即使在使用 PyInstaller 之后它仍然可以工作。
但我想使用 PySide2 而不是 PyQt5,有人知道解决这个问题的方法吗?
对于PySide2,我在使用PySide 5.13版本时也遇到了类似的问题。
然而,它在 PySide 5.6 版本上运行良好。
有趣的是,这个问题看起来与 matplotlib 包装器有关。似乎 的包装器发生了变化FigureCanvasQTAgg
。正在工作的包装器是:Shiboken.ObjectType
。虽然不起作用,但包装器是:sip.wrappertype
。