##// END OF EJS Templates
avoid mutable default argument!
avoid mutable default argument!

File last commit:

r27086:044a51b3
r27187:fca0f37b
Show More
qt_for_kernel.py
128 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
Thomas A Caswell
ENH: add support for Qt6 input hooks...
r26683 from IPython.external.qt_loaders import (
Thomas A Caswell
STY: apply darker
r26684 load_qt,
loaded_api,
enum_factory,
Thomas A Caswell
ENH: add support for Qt6 input hooks...
r26683 # QT6
Thomas A Caswell
STY: apply darker
r26684 QT_API_PYQT6,
QT_API_PYSIDE6,
Thomas A Caswell
ENH: add support for Qt6 input hooks...
r26683 # QT5
Thomas A Caswell
STY: apply darker
r26684 QT_API_PYQT5,
QT_API_PYSIDE2,
Thomas A Caswell
ENH: add support for Qt6 input hooks...
r26683 # QT4
Thomas A Caswell
STY: apply darker
r26684 QT_API_PYQTv1,
QT_API_PYQT,
QT_API_PYSIDE,
Thomas A Caswell
ENH: add support for Qt6 input hooks...
r26683 # default
Thomas A Caswell
STY: apply darker
r26684 QT_API_PYQT_DEFAULT,
Thomas A Caswell
ENH: add support for Qt6 input hooks...
r26683 )
_qt_apis = (
# QT6
Thomas A Caswell
STY: apply darker
r26684 QT_API_PYQT6,
QT_API_PYSIDE6,
Thomas A Caswell
ENH: add support for Qt6 input hooks...
r26683 # QT5
Thomas A Caswell
STY: apply darker
r26684 QT_API_PYQT5,
QT_API_PYSIDE2,
Thomas A Caswell
ENH: add support for Qt6 input hooks...
r26683 # QT4
Thomas A Caswell
STY: apply darker
r26684 QT_API_PYQTv1,
QT_API_PYQT,
QT_API_PYSIDE,
Thomas A Caswell
ENH: add support for Qt6 input hooks...
r26683 # default
Thomas A Caswell
STY: apply darker
r26684 QT_API_PYQT_DEFAULT,
Thomas A Caswell
ENH: add support for Qt6 input hooks...
r26683 )
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):
Thomas A Caswell
ENH: add support for Qt6 input hooks...
r26683 """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():
Thomas A Caswell
ENH: add support for Qt6 input hooks...
r26683 """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)
Nikita Kniazev
Deprecate `IPython.utils.version`...
r27086 if mpl is not None and tuple(mpl.__version__.split(".")) < ("1", "0", "2"):
# 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
Thomas A Caswell
ENH: add support for Qt6 input hooks...
r26683 return matplotlib_options(mpl) or [
QT_API_PYQT_DEFAULT,
QT_API_PYQT6,
QT_API_PYSIDE6,
QT_API_PYQT5,
QT_API_PYSIDE2,
QT_API_PYQT,
Thomas A Caswell
STY: apply darker
r26684 QT_API_PYSIDE,
Thomas A Caswell
ENH: add support for Qt6 input hooks...
r26683 ]
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
Thomas A Caswell
ENH: add support for Qt6 input hooks...
r26683
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)
Thomas A Caswell
ENH: add support for Qt6 input hooks...
r26683 enum_helper = enum_factory(QT_API, QtCore)