【问题标题】:PyQt5 and Matplotlib 1.4.2 - installing one breaks the otherPyQt5 和 Matplotlib 1.4.2 - 安装一个打破另一个
【发布时间】:2015-01-15 01:42:13
【问题描述】:

我正在尝试编写一个在其中嵌入 matplotlib 绘图的 PyQt5 应用程序。但是,如果我安装 matplotlib PyQt5 会因为 PyQt4 的干扰而中断,这让我很抓狂。这可以在这个错误中看到:

In [2]: from PyQt5 import QtCore, QtGui, QtWidgets
---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-2-43848d5bd21e> in <module>()
----> 1 from PyQt5 import QtCore, QtGui, QtWidgets

RuntimeError: the PyQt5.QtCore and PyQt4.QtCore modules both wrap the QObject class

如果我删除 PyQt4(并重新安装 PyQt5,因为删除 PyQt4 会删除 sip)我会遇到这个问题:

In [1]: import matplotlib.backends.backend_qt5agg
---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-1-6d2c21e1d629> in <module>()
----> 1 import matplotlib.backends.backend_qt5agg

C:\Anaconda3\lib\site-packages\matplotlib\backends\backend_qt5agg.py in <module>()
     16
     17 from .backend_agg import FigureCanvasAgg
---> 18 from .backend_qt5 import QtCore
     19 from .backend_qt5 import QtGui
     20 from .backend_qt5 import FigureManagerQT

C:\Anaconda3\lib\site-packages\matplotlib\backends\backend_qt5.py in <module>()
     29     figureoptions = None
     30
---> 31 from .qt_compat import QtCore, QtGui, QtWidgets, _getSaveFileName, __version__
     32 from matplotlib.backends.qt_editor.formsubplottool import UiSubplotTool
     33

C:\Anaconda3\lib\site-packages\matplotlib\backends\qt_compat.py in <module>()
     89     if QT_API in [QT_API_PYQT, QT_API_PYQTv2]:  # PyQt4 API
     90
---> 91         from PyQt4 import QtCore, QtGui
     92
     93         try:

ImportError: cannot import name 'QtCore'

我已经多次经历这个循环,从不同的来源安装每个。我正在使用 Python 3.4 的 Anaconda 发行版,我也已经卸载/重新安装过一次。

我一定是做错了什么,但老实说我不知道​​是什么。

任何帮助将不胜感激

【问题讨论】:

  • 你安装的是什么系统?
  • 在 Windows 8.1 上工作

标签: python matplotlib pyqt4 pyqt5


【解决方案1】:

由于您的 matplotlib 依赖于 PyQt4,您需要强制 Matplotlib 使用 PyQt5 后端。像这样:

import matplotlib
matplotlib.use("Qt5Agg")

这个函数必须在之前调用导入pyplot for 第一次;或者,如果您不使用 pyplot,则必须调用它 在导入 matplotlib.backends 之前。

【讨论】:

  • 你的意思是“依赖于 PyQT_5_”吗?
  • 如有需要您可以致电matplotlib.use("Qt5Agg",force=True)
  • 如果你在ipython中使用pylab,你可能需要ipython --pylab='qt5'
【解决方案2】:

问题是 Matplotlib 使用 QT5 而您使用的是 QT4。为了解决这个问题,你可以强制 Matplotlib 使用 QT4,通过编辑 matplotlibrc,它位于 \Lib\site-packages\matplotlib\mpl-data

【讨论】:

  • 直接修改源代码不是一个好习惯,如果库没有提供选择后端的选项,我可以这样做,但 matplolib 为您提供了这种能力,所以我看到您的回答不够充分.
  • 就我而言,当我使用 import matplotlib matplotlib.use("Qt5Agg") 时出现错误
  • 该指令应放在文件顶部,然后再进行任何其他导入
猜你喜欢
  • 2021-08-03
  • 1970-01-01
  • 2019-11-10
  • 2018-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多