2014-11-18 2 views
8

Я пытаюсь написать приложение PyQt5, в которое встроен сюжет matplotlib. Тем не менее, у меня время безумие, когда я устанавливаю разрывы matplotlib PyQt5 из-за вмешательства PyQt4. Это можно увидеть в этой ошибке:PyQt5 и Matplotlib 1.4.2 - установка одной разрывает другую

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 удаляет глотку) Я тогда этот вопрос:

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' 

Я прошел через этот цикл несколько раз , устанавливая каждый из разных источников. Я использую дистрибутив Anaconda Python 3.4, который я также удалил/переустановил уже.

Я должен делать что-то неправильно, но я честно не могу понять, что это такое.

Любая помощь будет оценена

+0

Какая система вы устанавливаете? – Ajean

+0

Работает на Windows 8.1 – user3014097

ответ

11

Как ваш Matplotlib зависит от PyQt4, вы должны заставить Matplotlib использовать PyQt5 бэкенд. Как это:

import matplotlib 
matplotlib.use("Qt5Agg") 

Эта функция должна быть вызвана перед тем импорта pyplot для в первый раз; или, если вы не используете pyplot, его необходимо называть перед импортом matplotlib.backends.

+0

Вы имеете в виду «зависит от PyQT_5_»? – GreenAsJade

+0

При необходимости вы можете вызвать 'matplotlib.use (« Qt5Agg », force = True)' – Jayesh

+0

Если вы используете pylab в ipython, вам может потребоваться сделать 'ipython -pylab = 'qt5'' –

0

Проблема в том, что Matplotlib использует QT5, и вы используете QT4. Чтобы решить эту проблему, вы можете заставить Matplotlib использовать QT4, отредактировав matplotlibrc, который находится в \ Lib \ site-packages \ matplotlib \ mpl-data enter image description here

+0

, изменяя Исходный код напрямую не является хорошей практикой, я мог бы сделать, если библиотека не предоставила возможность выбора бэкэнд, но matplolib предлагает вам эту способность, поэтому я вижу, что ваш ответ недостаточен. – eyllanesc

+0

Для моего случая, когда я использовал импорт Matplotlib matplotlib.use («Qt5Agg») я получил ошибку –

+0

инструкция должна быть помещена в верхней части файла, прежде чем любой другой импорт – eyllanesc