138 lines
4.4 KiB
Python
138 lines
4.4 KiB
Python
"""
|
|
Wrapper for PyMOL scripts to get PySide or PyQt
|
|
|
|
Useful link for PySide/PyQt4 differences:
|
|
https://deptinfo-ensip.univ-poitiers.fr/ENS/pyside-docs/pysideapi2.html
|
|
|
|
PyQt5/PyQt4 differences:
|
|
http://pyqt.sourceforge.net/Docs/PyQt5/pyqt4_differences.html
|
|
"""
|
|
|
|
DEBUG = False
|
|
|
|
PYQT_NAME = None
|
|
QtWidgets = None
|
|
|
|
try:
|
|
from pymol._Qt_pre import *
|
|
except ImportError:
|
|
if DEBUG:
|
|
print('import _Qt_pre failed')
|
|
|
|
PYQT_NAME = None
|
|
QtWidgets = None
|
|
|
|
try:
|
|
from pymol._Qt_pre import *
|
|
except ImportError:
|
|
if DEBUG:
|
|
print('import _Qt_pre failed')
|
|
|
|
import os
|
|
|
|
qt_api = os.environ.get('QT_API', '')
|
|
|
|
if not PYQT_NAME and qt_api in ('', 'pyqt5'):
|
|
try:
|
|
from PyQt5 import QtGui, QtCore, QtOpenGL, QtWidgets
|
|
PYQT_NAME = 'PyQt5'
|
|
except ImportError:
|
|
if DEBUG:
|
|
print('import PyQt5 failed')
|
|
|
|
if not PYQT_NAME and qt_api in ('', 'pyside2'):
|
|
try:
|
|
from PySide2 import QtGui, QtCore, QtOpenGL, QtWidgets
|
|
PYQT_NAME = 'PySide2'
|
|
except ImportError:
|
|
if DEBUG:
|
|
print('import PySide2 failed')
|
|
|
|
if not PYQT_NAME and qt_api in ('', 'pyqt6'):
|
|
try:
|
|
from PyQt6 import QtGui, QtCore, QtOpenGL, QtWidgets
|
|
from PyQt6 import QtOpenGLWidgets
|
|
PYQT_NAME = 'PyQt6'
|
|
except ImportError:
|
|
if DEBUG:
|
|
print('import PyQt6 failed')
|
|
|
|
if not PYQT_NAME and qt_api in ('', 'pyside6'):
|
|
try:
|
|
from PySide6 import QtGui, QtCore, QtOpenGL, QtWidgets
|
|
from PySide6 import QtOpenGLWidgets
|
|
PYQT_NAME = 'PySide6'
|
|
except ImportError:
|
|
if DEBUG:
|
|
print('import PySide6 failed')
|
|
|
|
if not PYQT_NAME:
|
|
raise ImportError(__name__)
|
|
|
|
# qtpy compatibility
|
|
os.environ['QT_API'] = PYQT_NAME.lower()
|
|
|
|
if QtWidgets is None:
|
|
QtWidgets = QtGui
|
|
|
|
if hasattr(QtCore, 'QAbstractProxyModel'):
|
|
QtCoreModels = QtCore
|
|
else:
|
|
QtCoreModels = QtGui
|
|
|
|
if PYQT_NAME.endswith('6'):
|
|
QtWidgets.QOpenGLWidget = QtOpenGLWidgets.QOpenGLWidget
|
|
QtWidgets.QActionGroup = QtGui.QActionGroup
|
|
QtWidgets.QAction = QtGui.QAction
|
|
QtWidgets.QShortcut = QtGui.QShortcut
|
|
QtCore.QSortFilterProxyModel.setFilterRegExp = QtCore.QSortFilterProxyModel.setFilterRegularExpression
|
|
QtGui.QFont.Monospace = QtGui.QFont.StyleHint.Monospace
|
|
|
|
def copy_attributes(target_class, source_class):
|
|
for attr in dir(source_class):
|
|
if not attr.startswith('_'):
|
|
setattr(target_class, attr, getattr(source_class, attr))
|
|
|
|
copy_attributes(QtCore.QEvent, QtCore.QEvent.Type)
|
|
copy_attributes(QtCore.Qt, QtCore.Qt.AlignmentFlag)
|
|
copy_attributes(QtCore.Qt, QtCore.Qt.CaseSensitivity)
|
|
copy_attributes(QtCore.Qt, QtCore.Qt.CheckState)
|
|
copy_attributes(QtCore.Qt, QtCore.Qt.ContextMenuPolicy)
|
|
copy_attributes(QtCore.Qt, QtCore.Qt.DockWidgetArea)
|
|
copy_attributes(QtCore.Qt, QtCore.Qt.FocusPolicy)
|
|
copy_attributes(QtCore.Qt, QtCore.Qt.GestureType)
|
|
copy_attributes(QtCore.Qt, QtCore.Qt.ItemFlag)
|
|
copy_attributes(QtCore.Qt, QtCore.Qt.Key)
|
|
copy_attributes(QtCore.Qt, QtCore.Qt.KeyboardModifier)
|
|
copy_attributes(QtCore.Qt, QtCore.Qt.MouseButton)
|
|
copy_attributes(QtCore.Qt, QtCore.Qt.Orientation)
|
|
copy_attributes(QtCore.Qt, QtCore.Qt.WindowType)
|
|
copy_attributes(QtGui.QFont, QtGui.QFont.StyleHint)
|
|
copy_attributes(QtWidgets.QAbstractItemView, QtWidgets.QAbstractItemView.ScrollHint)
|
|
copy_attributes(QtWidgets.QAbstractItemView, QtWidgets.QAbstractItemView.SelectionBehavior)
|
|
copy_attributes(QtWidgets.QAbstractItemView, QtWidgets.QAbstractItemView.SelectionMode)
|
|
copy_attributes(QtWidgets.QBoxLayout, QtWidgets.QBoxLayout.Direction)
|
|
copy_attributes(QtWidgets.QMainWindow, QtWidgets.QMainWindow.DockOption)
|
|
copy_attributes(QtWidgets.QOpenGLWidget, QtOpenGLWidgets.QOpenGLWidget.UpdateBehavior)
|
|
copy_attributes(QtWidgets.QSizePolicy, QtWidgets.QSizePolicy.Policy)
|
|
copy_attributes(QtWidgets.QTreeWidgetItem, QtWidgets.QTreeWidgetItem.ChildIndicatorPolicy)
|
|
|
|
QtCore.Qt.MidButton = QtCore.Qt.MiddleButton
|
|
QtCore.Qt.WA_LayoutUsesWidgetRect = QtCore.Qt.WidgetAttribute.WA_LayoutUsesWidgetRect
|
|
|
|
|
|
if PYQT_NAME[:4] == 'PyQt':
|
|
QtCore.Signal = QtCore.pyqtSignal
|
|
QtCore.Slot = QtCore.pyqtSlot
|
|
else:
|
|
QtCore.pyqtSignal = QtCore.Signal
|
|
QtCore.pyqtSlot = QtCore.Slot
|
|
QtCore.QT_VERSION_STR = QtCore.__version__
|
|
QtCore.QT_VERSION = (
|
|
0x10000 * QtCore.__version_info__[0] +
|
|
0x00100 * QtCore.__version_info__[1] +
|
|
0x00001 * QtCore.__version_info__[2])
|
|
|
|
del qt_api
|
|
del os
|