##// END OF EJS Templates
Import Tuple traitlet for Selection widget
Import Tuple traitlet for Selection widget

File last commit:

r16525:a15a6bb0
r19060:15154a6c
Show More
qt_for_kernel.py
83 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
Matthias BUSSONNIER
remove some other occurences of pylab
r11783 This is the import used for the `gui=qt` or `matplotlib=qt` initialization.
MinRK
reorder qt support in kernel...
r4191
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
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,
Chris Beaumont
added QT_API_DEFAULT Qt option. Fixed reversed MPL qt logic test.
r9815 QT_API_PYQT, QT_API_PYQT_DEFAULT,
Chris Beaumont
Refactor qt import logic. Fixes #2955
r9722 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':
Chris Beaumont
added QT_API_DEFAULT Qt option. Fixed reversed MPL qt logic test.
r9815 return [QT_API_PYQT_DEFAULT]
Chris Beaumont
Refactor qt import logic. Fixes #2955
r9722 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)
Chris Beaumont
added QT_API_DEFAULT Qt option. Fixed reversed MPL qt logic test.
r9815 if mpl is not None and not check_version(mpl.__version__, '1.0.2'):
Chris Beaumont
Refactor qt import logic. Fixes #2955
r9722 #1.0.1 only supports PyQt4 v1
Chris Beaumont
added QT_API_DEFAULT Qt option. Fixed reversed MPL qt logic test.
r9815 return [QT_API_PYQT_DEFAULT]
Chris Beaumont
Refactor qt import logic. Fixes #2955
r9722
if os.environ.get('QT_API', None) is None:
#no ETS variable. Ask mpl, then use either
Chris Beaumont
added QT_API_DEFAULT Qt option. Fixed reversed MPL qt logic test.
r9815 return matplotlib_options(mpl) or [QT_API_PYQT_DEFAULT, QT_API_PYSIDE]
Chris Beaumont
Refactor qt import logic. Fixes #2955
r9722
#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