如何可靠地说服matplotlib在从Anaconda (Spyder)运行时使用PySide2后端



我正在创建一个使用matplotlib的PySide2应用程序。我在安装了PySide2的环境中从Spyder运行这个应用程序。这将导致应用程序从iPython控制台运行。在代码行的某个地方,导入了PyQt5,我试图清除它,以说服matplotlib我确实想使用PySide2,而不是PyQt5。像下面这样的东西一直工作到最近,我不确定为什么它停止了,但可以肯定地说,这种方法是不可靠的。我怎样才能完全说服matplotlib我想要PySide2?

我尝试在操作系统(Windows 10)中设置环境变量QT_API,但在这种情况下,Spyder本身拒绝打开。

import sys
import os
ps = list(filter(lambda x: 'PyQt5' in x, sys.modules))
for p in ps:
print(f"purging module {p}")
sys.modules.pop(p)

# matplotlib.__init__ uses this
os.environ["MPLBACKEND"] = "PySide2"
# matplotlib.backends.qt_compat uses this
os.environ["QT_API"] = "PySide2"
import PySide2.QtCore
assert "PyQt5.QtCore" not in sys.modules
assert "PySide2.QtCore" in sys.modules
# rcParams has the right idea
from matplotlib import rcParams
print(rcParams["backend"])
# qt_compat has the WRONG idea!
import matplotlib.backends.qt_compat as qt_compat
print(qt_compat.QT_API)
# The FigureCanvasWidget is of the wrong (PyQt5) type
from matplotlib.backends.backend_qt5agg import FigureCanvas
import inspect
print(inspect.getmro(FigureCanvas))

要回答这个问题,它停止工作的原因是因为我在Spyder设置下的ipython选项卡中设置了对Matplotlib图形的"激活支持"。取消选中后,上面的工作。

最新更新