##// END OF EJS Templates
Switching to unicode version of os.getcwd in filefind
Switching to unicode version of os.getcwd in filefind

File last commit:

r4192:2767ebe8
r4206:de070f21
Show More
qt_for_kernel.py
82 lines | 2.6 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
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
matplotlib = sys.modules.get('matplotlib')
MinRK
update qt import priority per recent discussion...
r4192 if matplotlib and matplotlib.__version__ <= '1.0.1':
# 1.0.1 doesn't support pyside or v2, so stick with PyQt @v1,
# and ignore everything else
from PyQt4 import QtCore, QtGui
MinRK
reorder qt support in kernel...
r4191 else:
MinRK
update qt import priority per recent discussion...
r4192 # ask QT_API ETS variable *first*
MinRK
reorder qt support in kernel...
r4191 QT_API = os.environ.get('QT_API', None)
if QT_API is None:
MinRK
update qt import priority per recent discussion...
r4192 # QT_API not set, ask matplotlib if it was imported (e.g. `pylab=qt`)
if matplotlib:
mpqt = matplotlib.rcParams.get('backend.qt4', None)
else:
mpqt = None
if mpqt is None:
# matplotlib not imported or had nothing to say.
MinRK
reorder qt support in kernel...
r4191 try:
MinRK
update qt import priority per recent discussion...
r4192 # default to unconfigured PyQt4
from PyQt4 import QtCore, QtGui
MinRK
reorder qt support in kernel...
r4191 except ImportError:
MinRK
update qt import priority per recent discussion...
r4192 # fallback on PySide
try:
from PySide import QtCore, QtGui
except ImportError:
raise ImportError('Cannot import PySide or PyQt4')
elif mpqt.lower() == 'pyqt4':
# import PyQt4 unconfigured
from PyQt4 import QtCore, QtGui
elif mpqt.lower() == 'pyside':
from PySide import QtCore, QtGui
else:
raise ImportError("unhandled value for backend.qt4 from matplotlib: %r"%mpqt)
MinRK
reorder qt support in kernel...
r4191 else:
# QT_API specified, use PySide or PyQt+v2 API from external.qt
# this means ETS is likely to be used, which requires v2
MinRK
update qt import priority per recent discussion...
r4192 try:
from IPython.external.qt import QtCore, QtGui
except ValueError as e:
if 'API' in str(e):
# API mismatch, give more meaningful message
raise ImportError("""
Assigning the ETS variable `QT_API=pyqt` implies PyQt's v2 API for
QString and QVariant, but PyQt has already been imported
with v1 APIs. You must unset QT_API to work with PyQt4
in its default mode.
""")
else:
raise
MinRK
reorder qt support in kernel...
r4191