##// END OF EJS Templates
Add release notes for version 5.5
Add release notes for version 5.5

File last commit:

r23247:025d51d2
r24247:3cc02e57
Show More
qt_for_kernel.py
95 lines | 3.1 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
Zachary Pincus
doc fixes
r21675 if Qt has been imported anywhere else:
Chris Beaumont
Refactor qt import logic. Fixes #2955
r9722 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
Zachary Pincus
doc fixes
r21675 Next, ask QT_API env variable
MinRK
update qt import priority per recent discussion...
r4192
if QT_API not set:
Zachary Pincus
Clarify Qt import logic
r21679 ask matplotlib what it's using. If Qt4Agg or Qt5Agg, then use the
version matplotlib is configured with
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
Zachary Pincus
Clarify Qt import logic
r21679 try in this order:
Zachary Pincus
fallback to pyqt5 if present
r21680 PyQt default version, PySide, PyQt5
MinRK
update qt import priority per recent discussion...
r4192 else:
Zachary Pincus
doc fixes
r21675 use what QT_API says
MinRK
update qt import priority per recent discussion...
r4192
epatters
Support v2 PyQt4 APIs and PySide in kernel's GUI support....
r4149 """
Zachary Pincus
doc fixes
r21675 # 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.
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
Zachary Pincus
Merge in qtconsole/qt.py API-loading logic....
r21669 from IPython.external.qt_loaders import (load_qt, loaded_api, QT_API_PYSIDE,
Matthias Bussonnier
Backport PR #10148: New implementation of has_binding Qt check for Python 3.4+...
r23247 QT_API_PYSIDE2, QT_API_PYQT, QT_API_PYQT5,
Zachary Pincus
Merge in qtconsole/qt.py API-loading logic....
r21669 QT_API_PYQTv1, QT_API_PYQT_DEFAULT)
Matthias Bussonnier
Backport PR #10148: New implementation of has_binding Qt check for Python 3.4+...
r23247 _qt_apis = (QT_API_PYSIDE, QT_API_PYSIDE2, QT_API_PYQT, QT_API_PYQT5, QT_API_PYQTv1,
Zachary Pincus
Merge in qtconsole/qt.py API-loading logic....
r21669 QT_API_PYQT_DEFAULT)
MinRK
demote sip API failure to warning from ImportError
r4259
Zachary Pincus
Revert "add shim for external/qt_for_kernel.py"...
r21673 #Constraints placed on an imported matplotlib
Chris Beaumont
Refactor qt import logic. Fixes #2955
r9722 def matplotlib_options(mpl):
if mpl is None:
return
Zachary Pincus
Clarify Qt import logic
r21679 backend = mpl.rcParams.get('backend', None)
if backend == 'Qt4Agg':
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_PYQT_DEFAULT]
Zachary Pincus
s/pyqtv2/pyqt4v2/
r21681 elif mpqt.lower() == 'pyqt4v2':
Zachary Pincus
Clarify Qt import logic
r21679 return [QT_API_PYQT]
raise ImportError("unhandled value for backend.qt4 from matplotlib: %r" %
mpqt)
elif backend == 'Qt5Agg':
mpqt = mpl.rcParams.get('backend.qt5', None)
if mpqt is None:
return None
if mpqt.lower() == 'pyqt5':
return [QT_API_PYQT5]
raise ImportError("unhandled value for backend.qt5 from matplotlib: %r" %
mpqt)
Chris Beaumont
Refactor qt import logic. Fixes #2955
r9722
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
Zachary Pincus
Merge in qtconsole/qt.py API-loading logic....
r21669 qt_api = os.environ.get('QT_API', None)
if qt_api is None:
Zachary Pincus
Clarify Qt import logic
r21679 #no ETS variable. Ask mpl, then use default fallback path
Matthias Bussonnier
Backport PR #10148: New implementation of has_binding Qt check for Python 3.4+...
r23247 return matplotlib_options(mpl) or [QT_API_PYQT_DEFAULT, QT_API_PYSIDE,
QT_API_PYQT5, QT_API_PYSIDE2]
Zachary Pincus
Merge in qtconsole/qt.py API-loading logic....
r21669 elif qt_api not in _qt_apis:
raise RuntimeError("Invalid Qt API %r, valid values are: %r" %
Zachary Pincus
cosmetic fix
r21671 (qt_api, ', '.join(_qt_apis)))
Zachary Pincus
Merge in qtconsole/qt.py API-loading logic....
r21669 else:
return [qt_api]
Chris Beaumont
Refactor qt import logic. Fixes #2955
r9722
api_opts = get_options()
Zachary Pincus
Merge in qtconsole/qt.py API-loading logic....
r21669 QtCore, QtGui, QtSvg, QT_API = load_qt(api_opts)