##// END OF EJS Templates
Merge pull request #13662 from Carreau/auto-backport-of-pr-13660-on-7.x...
Merge pull request #13662 from Carreau/auto-backport-of-pr-13660-on-7.x Backport PR #13660 on branch 7.x (what's new 7.33)

File last commit:

r26711:cc937e04
r27652:fdb049a5 merge
Show More
qt_for_kernel.py
129 lines | 3.4 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
Matthias Bussonnier
Backport PR #13085: ENH: add support for Qt6 input hooks
r26711 from IPython.external.qt_loaders import (
load_qt,
loaded_api,
enum_factory,
# QT6
QT_API_PYQT6,
QT_API_PYSIDE6,
# QT5
QT_API_PYQT5,
QT_API_PYSIDE2,
# QT4
QT_API_PYQTv1,
QT_API_PYQT,
QT_API_PYSIDE,
# default
QT_API_PYQT_DEFAULT,
)
_qt_apis = (
# QT6
QT_API_PYQT6,
QT_API_PYSIDE6,
# QT5
QT_API_PYQT5,
QT_API_PYSIDE2,
# QT4
QT_API_PYQTv1,
QT_API_PYQT,
QT_API_PYSIDE,
# default
QT_API_PYQT_DEFAULT,
)
Zachary Pincus
Merge in qtconsole/qt.py API-loading logic....
r21669
MinRK
demote sip API failure to warning from ImportError
r4259
Chris Beaumont
Refactor qt import logic. Fixes #2955
r9722 def matplotlib_options(mpl):
Matthias Bussonnier
Backport PR #13085: ENH: add support for Qt6 input hooks
r26711 """Constraints placed on an imported matplotlib."""
Chris Beaumont
Refactor qt import logic. Fixes #2955
r9722 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():
Matthias Bussonnier
Backport PR #13085: ENH: add support for Qt6 input hooks
r26711 """Return a list of acceptable QT APIs, in decreasing order of preference."""
Chris Beaumont
Refactor qt import logic. Fixes #2955
r9722 #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 #13085: ENH: add support for Qt6 input hooks
r26711 return matplotlib_options(mpl) or [
QT_API_PYQT_DEFAULT,
QT_API_PYQT6,
QT_API_PYSIDE6,
QT_API_PYQT5,
QT_API_PYSIDE2,
QT_API_PYQT,
QT_API_PYSIDE,
]
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
Matthias Bussonnier
Backport PR #13085: ENH: add support for Qt6 input hooks
r26711
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)
Matthias Bussonnier
Backport PR #13085: ENH: add support for Qt6 input hooks
r26711 enum_helper = enum_factory(QT_API, QtCore)