qt.py
66 lines
| 2.1 KiB
| text/x-python
|
PythonLexer
Evan Patterson
|
r3304 | """ A Qt API selector that can be used to switch between PyQt and PySide. | ||
MinRK
|
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
|
r3304 | """ | ||
import os | ||||
epatters
|
r3306 | # Available APIs. | ||
QT_API_PYQT = 'pyqt' | ||||
QT_API_PYSIDE = 'pyside' | ||||
epatters
|
r3927 | def prepare_pyqt4(): | ||
epatters
|
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
|
r3304 | import sip | ||
sip.setapi('QString', 2) | ||||
epatters
|
r3364 | sip.setapi('QVariant', 2) | ||
Evan Patterson
|
r3304 | |||
epatters
|
r3927 | # Select Qt binding, using the QT_API environment variable if available. | ||
QT_API = os.environ.get('QT_API') | ||||
if QT_API is None: | ||||
try: | ||||
import PySide | ||||
MinRK
|
r4677 | if PySide.__version__ < '1.0.3': | ||
# old PySide, fallback on PyQt | ||||
raise ImportError | ||||
epatters
|
r3927 | QT_API = QT_API_PYSIDE | ||
except ImportError: | ||||
try: | ||||
prepare_pyqt4() | ||||
import PyQt4 | ||||
MinRK
|
r4677 | from PyQt4 import QtCore | ||
if QtCore.PYQT_VERSION_STR < '4.7': | ||||
# PyQt 4.6 has issues with null strings returning as None | ||||
raise ImportError | ||||
epatters
|
r3927 | QT_API = QT_API_PYQT | ||
except ImportError: | ||||
MinRK
|
r4677 | raise ImportError('Cannot import PySide >= 1.0.3 or PyQt4 >= 4.7') | ||
epatters
|
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
|
r3304 | from PyQt4 import QtCore, QtGui, QtSvg | ||
MinRK
|
r4677 | if QtCore.PYQT_VERSION_STR < '4.7': | ||
raise ImportError("IPython requires PyQt4 >= 4.7, found %s"%QtCore.PYQT_VERSION_STR) | ||||
Evan Patterson
|
r3304 | |||
# Alias PyQt-specific functions for PySide compatibility. | ||||
QtCore.Signal = QtCore.pyqtSignal | ||||
QtCore.Slot = QtCore.pyqtSlot | ||||
epatters
|
r3306 | elif QT_API == QT_API_PYSIDE: | ||
MinRK
|
r4677 | import PySide | ||
if PySide.__version__ < '1.0.3': | ||||
raise ImportError("IPython requires PySide >= 1.0.3, found %s"%PySide.__version__) | ||||
Evan Patterson
|
r3304 | from PySide import QtCore, QtGui, QtSvg | ||
epatters
|
r3306 | |||
else: | ||||
epatters
|
r3334 | raise RuntimeError('Invalid Qt API %r, valid values are: %r or %r' % | ||
(QT_API, QT_API_PYQT, QT_API_PYSIDE)) | ||||