2014-11-18 9 views
8

Próbuję napisać aplikację PyQt5, która osadza w niej wątek matplotlib. Mam jednak pewien czas, kiedy instaluję macplotlib PyQt5 z powodu ingerencji PyQt4. Można to zauważyć w tym błędzie:PyQt5 i Matplotlib 1.4.2 - instalowanie jednego zepsuje drugie

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 

Jeśli usunąć PyQt4 (i ponowna PyQt5 od usuwania PyQt4 usuwa SIP) I wtedy ten problem:

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' 

I już przez ten cykl kilka razy , instalując każdy z różnych źródeł. Używam dystrybucji Anaconda w Pythonie 3.4, którą już raz odinstalowałem/ponownie zainstalowałem.

Muszę robić coś złego, ale szczerze nie mogę zrozumieć, co to jest.

Każda pomoc będzie mile widziane

+0

Na jakim systemie instalujesz? – Ajean

+0

Praca w systemie Windows 8.1 – user3014097

Odpowiedz

11

Jako Twój matplotlib zależy PyQt4, trzeba wymusić matplotlib używać PyQt5 backend. Tak:

import matplotlib 
matplotlib.use("Qt5Agg") 

Funkcja ta musi być wywołana przed importowania pyplot dla po raz pierwszy; lub, jeśli nie korzystasz z pyplot, przed importowaniem matplotlib.backends należy go nazwać .

+0

Masz na myśli "zależy od PyQT_5_"? – GreenAsJade

+0

W razie potrzeby możesz wywołać 'matplotlib.use (" Qt5Agg ", force = True)' – Jayesh

+0

Jeśli używasz pylab w ipython, może być konieczne zrobienie 'ipython --pylab = 'qt5'' –

0

Problem polega na tym, że Matplotlib używa QT5 i używasz QT4. Aby rozwiązać problem, możesz zmusić Matplotlib do używania QT4, edytując matplotlibrc, który znajduje się w \ Lib \ site-packages \ matplotlib \ mpl-data

+0

modyfikując Kod źródłowy bezpośrednio nie jest dobrą praktyką, mógłbym zrobić, gdyby biblioteka nie dała opcji wyboru backendu, ale matplolib oferuje tę zdolność, więc widzę, że twoja odpowiedź nie jest odpowiednia. – eyllanesc

+0

Na moim przypadku, kiedy używane import matplotlib matplotlib.use („Qt5Agg”) mam błąd –

+0

Instrukcja powinna być umieszczona w górnej części pliku przed każdym innym importu – eyllanesc

Powiązane problemy