1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183
|
# -*- coding: utf-8 -*-
__author__ = "Roman Chernikov, Konstantin Klementiev"
__date__ = "01 Nov 2017"
#try:
# from matplotlib.backends import qt_compat
#except ImportError:
# from matplotlib.backends import qt4_compat
# qt_compat = qt4_compat
QtImports = 'PyQt5', 'PyQt4', 'PySide2', 'PySide6'
for QtImport in QtImports:
try:
__import__(QtImport)
QtName = QtImport
break
except ImportError:
QtName = None
else:
raise ImportError("Cannot import any PyQt package!")
starImport = False # star import doesn't work with mock import needed for rtfd
#if 'pyqt4' in qt_compat.QT_API.lower(): # also 'PyQt4v2'
if QtName == "PyQt4":
from PyQt4 import QtGui, QtCore
import PyQt4.QtGui as myQtGUI
if starImport:
from PyQt4.QtGui import *
from PyQt4.QtCore import *
Signal = pyqtSignal
else:
from PyQt4.QtCore import (
SIGNAL, QUrl, QObject, QTimer, QProcess,
QThread, QT_VERSION_STR, PYQT_VERSION_STR)
from PyQt4.QtGui import QSortFilterProxyModel
try:
from PyQt4.QtCore import Signal
except ImportError:
from PyQt4.QtCore import pyqtSignal as Signal
import PyQt4.QtCore
locals().update(vars(PyQt4.QtCore.Qt))
from PyQt4.QtOpenGL import QGLWidget
from PyQt4.QtSql import (QSqlDatabase, QSqlQuery, QSqlTableModel,
QSqlQueryModel)
import PyQt4.QtWebKit as QtWeb
try:
import PyQt4.Qwt5 as Qwt
except: # analysis:ignore
pass
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as\
FigCanvas
#elif 'pyqt5' in qt_compat.QT_API.lower():
elif QtName == "PyQt5":
from PyQt5 import QtGui, QtCore
import PyQt5.QtWidgets as myQtGUI
if starImport:
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
Signal = pyqtSignal
else:
from PyQt5.QtCore import (
pyqtSignal, QUrl, QObject, QTimer, QProcess, QThread,
QT_VERSION_STR, PYQT_VERSION_STR, QSortFilterProxyModel)
try:
from PyQt5.QtCore import Signal
except ImportError:
from PyQt5.QtCore import pyqtSignal as Signal
import PyQt5.QtCore
locals().update(vars(PyQt5.QtCore.Qt))
from PyQt5.QtOpenGL import QGLWidget
from PyQt5.QtSql import (QSqlDatabase, QSqlQuery, QSqlTableModel,
QSqlQueryModel)
try:
import PyQt5.QtWebEngineWidgets as QtWeb
except ImportError:
import PyQt5.QtWebKitWidgets as QtWeb
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as\
FigCanvas
elif QtName == "PySide2":
from PySide2 import QtGui, QtCore
import PySide2.QtWidgets as myQtGUI
if starImport:
from PySide2.QtGui import *
from PySide2.QtCore import *
from PySide2.QtWidgets import *
else:
from PySide2.QtCore import (
QUrl, QObject, QTimer, QProcess, QThread, QSortFilterProxyModel)
try:
from PySide2.QtCore import Signal
except ImportError:
from PySide2.QtCore import pyqtSignal as Signal
import PySide2.QtCore
QT_VERSION_STR = PySide2.QtCore.qVersion()
PYQT_VERSION_STR = PySide2.__version__
locals().update(vars(PySide2.QtCore.Qt))
from PySide2.QtOpenGL import QGLWidget
from PySide2.QtSql import (QSqlDatabase, QSqlQuery, QSqlTableModel,
QSqlQueryModel)
try:
import PySide2.QtWebEngineWidgets as QtWeb
except ImportError:
import PySide2.QtWebKitWidgets as QtWeb
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as\
FigCanvas
else:
raise ImportError("Cannot import any Python Qt package!")
if not starImport:
(QWidget, QApplication, QAction, QTabWidget, QToolBar, QStatusBar,
QTreeView, QShortcut, QAbstractItemView, QHBoxLayout, QVBoxLayout,
QSplitter, StdQComboBox, QMenu, QListWidget, QTextEdit, QMessageBox,
QFileDialog, QListWidgetItem, QGroupBox, QProgressBar, QLabel, QTableView,
QSizePolicy, QLineEdit, QCheckBox, QSpinBox, QSlider, QToolButton,
QPushButton, QDialog) = (
myQtGUI.QWidget, myQtGUI.QApplication, myQtGUI.QAction,
myQtGUI.QTabWidget, myQtGUI.QToolBar, myQtGUI.QStatusBar,
myQtGUI.QTreeView, myQtGUI.QShortcut, myQtGUI.QAbstractItemView,
myQtGUI.QHBoxLayout, myQtGUI.QVBoxLayout, myQtGUI.QSplitter,
myQtGUI.QComboBox, myQtGUI.QMenu, myQtGUI.QListWidget,
myQtGUI.QTextEdit, myQtGUI.QMessageBox, myQtGUI.QFileDialog,
myQtGUI.QListWidgetItem, myQtGUI.QGroupBox, myQtGUI.QProgressBar,
myQtGUI.QLabel, myQtGUI.QTableView, myQtGUI.QSizePolicy,
myQtGUI.QLineEdit, myQtGUI.QCheckBox, myQtGUI.QSpinBox,
myQtGUI.QSlider, myQtGUI.QToolButton, myQtGUI.QPushButton,
myQtGUI.QDialog)
(QIcon, QFont, QKeySequence, QStandardItemModel, QStandardItem, QPixmap,
QDoubleValidator, QIntValidator, QDrag) = (
QtGui.QIcon, QtGui.QFont, QtGui.QKeySequence, QtGui.QStandardItemModel,
QtGui.QStandardItem, QtGui.QPixmap, QtGui.QDoubleValidator,
QtGui.QIntValidator, QtGui.QDrag)
class mySlider(QSlider):
def __init__(self, parent, scaleDirection, scalePosition):
super(mySlider, self).__init__(scaleDirection)
self.setTickPosition(scalePosition)
self.scale = 1.
def setRange(self, start, end, step):
if step == 0:
return
self.scale = 1. / step
# QSlider.setRange(self, int(start/step), int(end/step))
super(mySlider, self).setRange(int(start/step), int(end/step))
def setValue(self, value):
# QSlider.setValue(self, int(value*self.scale))
super(mySlider, self).setValue(int(value*self.scale))
try:
glowSlider = Qwt.QwtSlider
glowTopScale = Qwt.QwtSlider.TopScale
except: # analysis:ignore
glowSlider = mySlider
glowTopScale = QSlider.TicksAbove
class QComboBox(StdQComboBox):
"""
Disabling off-focus mouse wheel scroll is based on the following solution:
https://stackoverflow.com/questions/3241830/qt-how-to-disable-mouse-scrolling-of-qcombobox/3242107#3242107
"""
def __init__(self, *args, **kwargs):
super(QComboBox, self).__init__(*args, **kwargs)
# self.scrollWidget=scrollWidget
self.setFocusPolicy(QtCore.Qt.StrongFocus)
def wheelEvent(self, *args, **kwargs):
if self.hasFocus():
return StdQComboBox.wheelEvent(self, *args, **kwargs)
else:
return self.parent().wheelEvent(*args, **kwargs)
|