使用PyInstaller

时间:2019-05-17 08:10:48

标签: 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

在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,因此无法将其添加到布局中。

我尝试添加以下行以建议here来建议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,有人知道解决此问题的方法吗?

2 个答案:

答案 0 :(得分:0)

对于PySide2,当我使用PySide 5.13版本时,我也遇到类似的问题。

对于PySide 5.6版,它正在 fine 上运行。

有趣的是,该问题看起来与matplotlib包装器类似。 FigureCanvasQTAgg的包装程序似乎有所变化。一个有效的包装器是:Shiboken.ObjectType。当一个不起作用时,包装器为:sip.wrappertype

答案 1 :(得分:0)

我有同样的问题。这对我有用

conda uninstall matplotlib
pip install matplotlib