Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PyQt5和Matplotlib 1.4.2-安装一个会破坏另一个_Python_Matplotlib_Pyqt4_Pyqt5 - Fatal编程技术网

Python PyQt5和Matplotlib 1.4.2-安装一个会破坏另一个

Python PyQt5和Matplotlib 1.4.2-安装一个会破坏另一个,python,matplotlib,pyqt4,pyqt5,Python,Matplotlib,Pyqt4,Pyqt5,我正在尝试编写一个PyQt5应用程序,在其中嵌入matplotlib绘图。但是,如果我安装matplotlib PyQt5,由于PyQt4的干扰,我会有一段令人发狂的时间。这可以从以下错误中看出: In [2]: from PyQt5 import QtCore, QtGui, QtWidgets --------------------------------------------------------------------------- RuntimeError

我正在尝试编写一个PyQt5应用程序,在其中嵌入matplotlib绘图。但是,如果我安装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
[2]中的
:从PyQt5导入QtCore、QtGui、qtwidget
---------------------------------------------------------------------------
运行时错误回溯(上次最近调用)
在()
---->1从PyQt5导入QtCore、QtGui、QtWidgets
运行时错误:PyQt5.QtCore和PyQt4.QtCore模块都包装了QObject类
如果我删除PyQt4(并且由于删除PyQt4会删除sip而重新安装PyQt5),则会出现以下问题:

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'
[1]中的
:导入matplotlib.backends.backend_qt5agg
---------------------------------------------------------------------------
ImportError回溯(最近一次呼叫最后一次)
在()
---->1导入matplotlib.backends.backend_qt5agg
C:\Anaconda3\lib\site packages\matplotlib\backends\backend\u qt5agg.py in()
16
17从后端_agg导入图Canvasagg
--->18从后端_qt5导入QtCore
19从后端_qt5导入QtGui
20 from.backend_qt5导入FigureManager qt
C:\Anaconda3\lib\site packages\matplotlib\backends\backend_qt5.py in()
29图选项=无
30
--->31从.qt\u compat导入QtCore、QtGui、qtwidget、\u getSaveFileName、\uu版本__
32从matplotlib.backends.qt_editor.formsubplottool导入UiSubplotTool
33
C:\Anaconda3\lib\site packages\matplotlib\backends\qt\u compat.py in()
89如果[QT_API_PYQT,QT_API_PYQTv2]中的QT_API:#PyQt4 API
90
--->91从PyQt4导入QtCore、QtGui
92
93尝试:
ImportError:无法导入名称“QtCore”
我已经经历了多次这个循环,从不同的来源安装了每一个。我使用的是Python 3.4的Anaconda发行版,我已经卸载/重新安装过一次

我一定是做错了什么,但我真的不知道是什么


任何帮助都将不胜感激

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

import matplotlib
matplotlib.use("Qt5Agg")
必须在为导入pyplot之前调用此函数 第一次,;或者,如果不使用pyplot,则必须调用它
在导入matplotlib.backends之前

问题在于Matplotlib使用的是QT5,而您使用的是QT4。要解决此问题,您可以通过编辑matplotlibrc来强制Matplotlib使用QT4,matplotlibrc位于\Lib\site packages\Matplotlib\mpl data

您安装的是哪种系统?在Windows 8.1上工作是指“依赖于PyQT_5_u”?如有必要,您可以调用
Matplotlib.use(“Qt5Agg”,force=True)
如果您在ipython中使用pylab,您可能需要执行
ipython--pylab='qt5'
直接修改源代码不是一个好的做法,如果库没有提供选择后端的选项,我可以这样做,但是matplolib提供了这种能力,因此我认为您的答案是不充分的,当我使用import matplotlib matplotlib.use(“Qt5Agg”)时,我遇到了一个错误。在进行任何其他导入之前,应该将指令放在文件的顶部