2014-11-18 5 views
8

matplotlib 플롯을 포함하는 PyQt5 응용 프로그램을 작성하려고합니다. 그러나, 나는 PyQt4에 의한 간섭으로 인해 matplotlib PyQt5가 깨지는 것을 막을 수있는 시간을 보냈습니다. 이는이 오류에서 볼 수있다 :이 사이클을 여러 번 겪었PyQt5와 Matplotlib 1.4.2 - 다른 하나가 깨지면

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' 

: 내가 PyQt4를 제거 (및 제거 PyQt4는 모금을 제거하기 때문에 PyQt5를 다시 설치)하면

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 

내가 다음이 문제가 각각 다른 출처에서 설치하십시오. Python 3.4의 Anaconda 배포판을 사용하고 있습니다.이 배포판은 이미 한 번 제거했거나 다시 설치했습니다.

나는 틀린 일을해야합니다. 그러나 나는 솔직히 그것이 무엇인지 알 수 없습니다. 당신하기 matplotlib가 PyQt4에 따라 달라

어떤 도움이

+0

어떤 종류의 시스템을 설치하고 있습니까? – Ajean

+0

Windows에서 작업하기 8.1 – user3014097

답변

11

을 감상 할 수있다, 당신은 PyQt5 백엔드를 사용하기 matplotlib를 강제 할 필요가있다. 이처럼 :이 기능은 처음 pyplot을 가져 전에 를 호출해야

import matplotlib 
matplotlib.use("Qt5Agg") 

; 또는 pyplot을 사용하지 않는 경우 matplotlib.backends를 가져 오기 전에 이라고해야합니다.

+0

"depends on PyQT_5_"를 원하십니까? – GreenAsJade

+0

필요하다면'matplotlib.use (Qt5Agg ", force = True)를 호출 할 수도있다. – Jayesh

+0

ipython에서 pylab을 사용한다면,'ipython --pylab = 'qt5'' –

0

문제는 Matplotlib이 QT5를 사용하고 QT4를 사용하고 있다는 것입니다. 이 문제를 해결하기 위해 \ Lib \ site-packages \ matplotlib \ mpl-data에있는 matplotlibrc를 편집하여 Matplotlib에 QT4를 사용하게 할 수 있습니다. enter image description here

+0

을 수정할 필요가있다. 소스 코드는 직접적으로 좋은 습관이 아닙니다. 라이브러리가 백엔드를 선택하는 옵션을 제공하지 않으면 할 수 있습니다.하지만 matplolib이 그 기능을 제공하므로 사용자의 대답이 적절하지 않습니다. 내가 가져 오기 matplotlib.use ("Qt5Agg")을하기 matplotlib 사용 내 경우에 대해서는 – eyllanesc

+0

내가 명령은 다른 가져 오기 전에 파일의 상단에 배치해야합니다 오류 –

+0

있어 – eyllanesc