Skip to content

Commit

Permalink
Merge pull request ipython#8829 from zpincus/Qt5_fix
Browse files Browse the repository at this point in the history
Qt5 fix
  • Loading branch information
minrk committed Sep 25, 2015
2 parents d77341c + 6b10008 commit 0596ffd
Showing 1 changed file with 24 additions and 16 deletions.
40 changes: 24 additions & 16 deletions IPython/external/qt_for_kernel.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@
Import Priority:
if Qt4 has been imported anywhere else:
if Qt has been imported anywhere else:
use that
if matplotlib has been imported and doesn't support v2 (<= 1.0.1):
use PyQt4 @v1
Next, ask ETS' QT_API env variable
Next, ask QT_API env variable
if QT_API not set:
ask matplotlib via rcParams['backend.qt4']
Expand All @@ -26,20 +26,29 @@
except:
fallback on PySide
else:
use PyQt @v2 or PySide, depending on QT_API
because ETS doesn't work with PyQt @v1.
use what QT_API says
"""
# NOTE: This is no longer an external, third-party module, and should be
# considered part of IPython. For compatibility however, it is being kept in
# IPython/external.

import os
import sys

from IPython.utils.version import check_version
from IPython.external.qt_loaders import (load_qt, QT_API_PYSIDE,
QT_API_PYQT, QT_API_PYQT_DEFAULT,
loaded_api)
from IPython.external.qt_loaders import (load_qt, loaded_api, QT_API_PYSIDE,
QT_API_PYQT, QT_API_PYQT5,
QT_API_PYQTv1, QT_API_PYQT_DEFAULT)

_qt_apis = (QT_API_PYSIDE, QT_API_PYQT, QT_API_PYQT5, QT_API_PYQTv1,
QT_API_PYQT_DEFAULT)

#Constraints placed on an imported matplotlib
# TODO: Make sure this logic is still in sync with matplotlib's requirements.
# In particular, matplotlib can also now support a qt5 backend, and so this will
# break if matplotlib is imported and running happily with qt5, because
# it only queries for the preferred qt4 option.
def matplotlib_options(mpl):
if mpl is None:
return
Expand Down Expand Up @@ -68,16 +77,15 @@ def get_options():
#1.0.1 only supports PyQt4 v1
return [QT_API_PYQT_DEFAULT]

if os.environ.get('QT_API', None) is None:
qt_api = os.environ.get('QT_API', None)
if qt_api is None:
#no ETS variable. Ask mpl, then use either
return matplotlib_options(mpl) or [QT_API_PYQT_DEFAULT, QT_API_PYSIDE]

#ETS variable present. Will fallback to external.qt
return None
elif qt_api not in _qt_apis:
raise RuntimeError("Invalid Qt API %r, valid values are: %r" %
(qt_api, ', '.join(_qt_apis)))
else:
return [qt_api]

api_opts = get_options()
if api_opts is not None:
QtCore, QtGui, QtSvg, QT_API = load_qt(api_opts)

else: # use ETS variable
from IPython.external.qt import QtCore, QtGui, QtSvg, QT_API
QtCore, QtGui, QtSvg, QT_API = load_qt(api_opts)

0 comments on commit 0596ffd

Please sign in to comment.