##// END OF EJS Templates
Refactor qt import logic. Fixes #2955
Refactor qt import logic. Fixes #2955

File last commit:

r9722:7ec1888e
r9722:7ec1888e
Show More
qt_for_kernel.py
84 lines | 2.3 KiB | text/x-python | PythonLexer
epatters
Support v2 PyQt4 APIs and PySide in kernel's GUI support....
r4149 """ Import Qt in a manner suitable for an IPython kernel.
MinRK
reorder qt support in kernel...
r4191
This is the import used for the `gui=qt` or `pylab=qt` initialization.
MinRK
update qt import priority per recent discussion...
r4192 Import Priority:
MinRK
reorder qt support in kernel...
r4191
Chris Beaumont
Refactor qt import logic. Fixes #2955
r9722 if Qt4 has been imported anywhere else:
use that
MinRK
update qt import priority per recent discussion...
r4192 if matplotlib has been imported and doesn't support v2 (<= 1.0.1):
use PyQt4 @v1
MinRK
reorder qt support in kernel...
r4191
MinRK
update qt import priority per recent discussion...
r4192 Next, ask ETS' QT_API env variable
if QT_API not set:
ask matplotlib via rcParams['backend.qt4']
if it said PyQt:
use PyQt4 @v1
elif it said PySide:
use PySide
MinRK
reorder qt support in kernel...
r4191
MinRK
update qt import priority per recent discussion...
r4192 else: (matplotlib said nothing)
# this is the default path - nobody told us anything
MinRK
reorder qt support in kernel...
r4191 try:
PyQt @v1
except:
fallback on PySide
MinRK
update qt import priority per recent discussion...
r4192 else:
use PyQt @v2 or PySide, depending on QT_API
because ETS doesn't work with PyQt @v1.
epatters
Support v2 PyQt4 APIs and PySide in kernel's GUI support....
r4149 """
MinRK
reorder qt support in kernel...
r4191 import os
epatters
Support v2 PyQt4 APIs and PySide in kernel's GUI support....
r4149 import sys
MinRK
demote sip API failure to warning from ImportError
r4259 from IPython.utils.warn import warn
MinRK
add check_version utility...
r9317 from IPython.utils.version import check_version
Chris Beaumont
Refactor qt import logic. Fixes #2955
r9722 from IPython.external.qt_loaders import (load_qt, QT_API_PYSIDE,
QT_API_PYQT, QT_API_PYQTv1,
loaded_api)
MinRK
demote sip API failure to warning from ImportError
r4259
Chris Beaumont
Refactor qt import logic. Fixes #2955
r9722 #Constraints placed on an imported matplotlib
def matplotlib_options(mpl):
if mpl is None:
return
mpqt = mpl.rcParams.get('backend.qt4', None)
if mpqt is None:
return None
if mpqt.lower() == 'pyside':
return [QT_API_PYSIDE]
elif mpqt.lower() == 'pyqt4':
return [QT_API_PYQTv1]
raise ImportError("unhandled value for backend.qt4 from matplotlib: %r" %
mpqt)
def get_options():
"""Return a list of acceptable QT APIs, in decreasing order of
preference
"""
#already imported Qt somewhere. Use that
loaded = loaded_api()
if loaded is not None:
return [loaded]
mpl = sys.modules.get('matplotlib', None)
if mpl is not None and check_version(mpl.__version__, '1.0.2'):
#1.0.1 only supports PyQt4 v1
return [QT_API_PYQTv1]
if os.environ.get('QT_API', None) is None:
#no ETS variable. Ask mpl, then use either
return matplotlib_options(mpl) or [QT_API_PYQTv1, QT_API_PYSIDE]
#ETS variable present. Will fallback to external.qt
return None
api_opts = get_options()
if api_opts is not None:
QtCore, QtGui, QtSvg, QT_API = load_qt(api_opts)
MinRK
reorder qt support in kernel...
r4191
Chris Beaumont
Refactor qt import logic. Fixes #2955
r9722 else: # use ETS variable
from IPython.external.qt import QtCore, QtGui, QtSvg, QT_API