##// END OF EJS Templates
add check_version utility...
add check_version utility using LooseVersion and explicitly catching TypeError, rather than the NumericalVersion subclass.

File last commit:

r9317:b6be263b
r9317:b6be263b
Show More
qt.py
81 lines | 3.0 KiB | text/x-python | PythonLexer
Evan Patterson
Paved the way for PySide support....
r3304 """ A Qt API selector that can be used to switch between PyQt and PySide.
MinRK
reorder qt support in kernel...
r4191
This uses the ETS 4.0 selection pattern of:
PySide first, PyQt with API v2. second.
Do not use this if you need PyQt with the old QString/QVariant API.
Evan Patterson
Paved the way for PySide support....
r3304 """
import os
MinRK
add check_version utility...
r9317 from IPython.utils.version import check_version
epatters
Clean up in Qt API switcher.
r3306 # Available APIs.
QT_API_PYQT = 'pyqt'
QT_API_PYSIDE = 'pyside'
epatters
Smarter Qt binding selection when environment variable is not specified.
r3927 def prepare_pyqt4():
epatters
Fixed PySide incompatibility with QVariant....
r3364 # For PySide compatibility, use the new-style string API that automatically
# converts QStrings to Unicode Python strings. Also, automatically unpack
# QVariants to their underlying objects.
Evan Patterson
Paved the way for PySide support....
r3304 import sip
sip.setapi('QString', 2)
epatters
Fixed PySide incompatibility with QVariant....
r3364 sip.setapi('QVariant', 2)
Evan Patterson
Paved the way for PySide support....
r3304
epatters
Smarter Qt binding selection when environment variable is not specified.
r3927 # Select Qt binding, using the QT_API environment variable if available.
QT_API = os.environ.get('QT_API')
if QT_API is None:
Julian Taylor
check for complete pyside presence before trying to import...
r9006 pyside_found = False
epatters
Smarter Qt binding selection when environment variable is not specified.
r3927 try:
import PySide
MinRK
add check_version utility...
r9317 if not check_version(PySide.__version__, '1.0.3'):
MinRK
version check Qt bindings in external.qt...
r4677 # old PySide, fallback on PyQt
raise ImportError
Julian Taylor
check for complete pyside presence before trying to import...
r9006 # we can't import an incomplete pyside and pyqt4
# this will cause a crash in sip (#1431)
# check for complete presence before importing
import imp
imp.find_module("QtCore", PySide.__path__)
imp.find_module("QtGui", PySide.__path__)
imp.find_module("QtSvg", PySide.__path__)
pyside_found = True
Julian Taylor
ensure all needed qt parts can be imported before settling for one...
r6722 from PySide import QtCore, QtGui, QtSvg
epatters
Smarter Qt binding selection when environment variable is not specified.
r3927 QT_API = QT_API_PYSIDE
except ImportError:
try:
prepare_pyqt4()
import PyQt4
Julian Taylor
ensure all needed qt parts can be imported before settling for one...
r6722 from PyQt4 import QtCore, QtGui, QtSvg
Julian Taylor
check for complete pyside presence before trying to import...
r9006 if pyside_found:
print "WARNING: PySide installation incomplete and PyQt4 " \
"present.\nThis will likely crash, please install " \
"PySide completely, remove PySide or PyQt4 or set " \
"the QT_API environment variable to pyqt or pyside"
MinRK
add check_version utility...
r9317 if not check_version(QtCore.PYQT_VERSION_STR, '4.7'):
MinRK
version check Qt bindings in external.qt...
r4677 # PyQt 4.6 has issues with null strings returning as None
raise ImportError
epatters
Smarter Qt binding selection when environment variable is not specified.
r3927 QT_API = QT_API_PYQT
except ImportError:
MinRK
version check Qt bindings in external.qt...
r4677 raise ImportError('Cannot import PySide >= 1.0.3 or PyQt4 >= 4.7')
Bernardo B. Marques
remove all trailling spaces
r4872
epatters
Smarter Qt binding selection when environment variable is not specified.
r3927 elif QT_API == QT_API_PYQT:
# Note: This must be called *before* PyQt4 is imported.
prepare_pyqt4()
# Now peform the imports.
if QT_API == QT_API_PYQT:
Evan Patterson
Paved the way for PySide support....
r3304 from PyQt4 import QtCore, QtGui, QtSvg
MinRK
add check_version utility...
r9317 if not check_version(QtCore.PYQT_VERSION_STR, '4.7'):
MinRK
version check Qt bindings in external.qt...
r4677 raise ImportError("IPython requires PyQt4 >= 4.7, found %s"%QtCore.PYQT_VERSION_STR)
Evan Patterson
Paved the way for PySide support....
r3304
# Alias PyQt-specific functions for PySide compatibility.
QtCore.Signal = QtCore.pyqtSignal
QtCore.Slot = QtCore.pyqtSlot
epatters
Clean up in Qt API switcher.
r3306 elif QT_API == QT_API_PYSIDE:
MinRK
version check Qt bindings in external.qt...
r4677 import PySide
MinRK
add check_version utility...
r9317 if not check_version(PySide.__version__, '1.0.3'):
MinRK
version check Qt bindings in external.qt...
r4677 raise ImportError("IPython requires PySide >= 1.0.3, found %s"%PySide.__version__)
Evan Patterson
Paved the way for PySide support....
r3304 from PySide import QtCore, QtGui, QtSvg
epatters
Clean up in Qt API switcher.
r3306
else:
Bernardo B. Marques
remove all trailling spaces
r4872 raise RuntimeError('Invalid Qt API %r, valid values are: %r or %r' %
epatters
Improved error message for Qt API switcher.
r3334 (QT_API, QT_API_PYQT, QT_API_PYSIDE))