forked from pyrocko/pyrocko
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
2.7 KiB
Python
102 lines
2.7 KiB
Python
|
|
# http://pyrocko.org - GPLv3
|
|
#
|
|
# The Pyrocko Developers, 21st Century
|
|
# ---|P------/S----------~Lg----------
|
|
|
|
import os
|
|
import platform
|
|
import matplotlib
|
|
|
|
from pyrocko import config
|
|
|
|
# Needed by MacOS Big Sur
|
|
# https://stackoverflow.com/questions/64833558/apps-not-popping-up-on-macos-big-sur-11-0-1#_=
|
|
if platform.uname()[0] == 'Darwin':
|
|
os.environ['QT_MAC_WANTS_LAYER'] = '1'
|
|
|
|
gui_toolkit = config.effective_gui_toolkit()
|
|
|
|
qt5_backend_available = 'Qt5Agg' in matplotlib.rcsetup.all_backends
|
|
|
|
if gui_toolkit == 'auto':
|
|
try:
|
|
if qt5_backend_available:
|
|
import PyQt5
|
|
use_pyqt5 = True
|
|
else:
|
|
use_pyqt5 = False
|
|
except ImportError:
|
|
use_pyqt5 = False
|
|
|
|
elif gui_toolkit == 'qt4':
|
|
use_pyqt5 = False
|
|
else:
|
|
use_pyqt5 = True
|
|
if not qt5_backend_available:
|
|
raise Exception(
|
|
'Qt5 was forced but matplotlib Qt5Agg backend is not availble')
|
|
|
|
|
|
if use_pyqt5:
|
|
if matplotlib.get_backend().find('Qt4') != -1: # noqa
|
|
matplotlib.use('Qt5Agg')
|
|
|
|
import PyQt5 as PyQt
|
|
from PyQt5 import Qt
|
|
from PyQt5 import QtCore as qc
|
|
from PyQt5 import QtGui as qg
|
|
from PyQt5 import QtWidgets as qw
|
|
from PyQt5 import QtNetwork as qn
|
|
from PyQt5 import QtOpenGL as qgl
|
|
from PyQt5 import QtSvg as qsvg
|
|
from PyQt5 import QtPrintSupport as qprint
|
|
QSortFilterProxyModel = qc.QSortFilterProxyModel
|
|
QItemSelectionModel = qc.QItemSelectionModel
|
|
QItemSelection = qc.QItemSelection
|
|
|
|
def getSaveFileName(*args, **kwargs):
|
|
return qw.QFileDialog.getSaveFileName(*args, **kwargs)[0]
|
|
|
|
class QPixmapCache(qg.QPixmapCache):
|
|
def cached(self, key):
|
|
return self.find(key)
|
|
|
|
else:
|
|
if matplotlib.get_backend().find('Qt5') != -1: # noqa
|
|
matplotlib.use('Qt4Agg')
|
|
|
|
import PyQt4 as PyQt
|
|
from PyQt4 import Qt
|
|
from PyQt4 import QtCore as qc
|
|
from PyQt4 import QtGui as qg
|
|
qw = qg
|
|
from PyQt4 import QtNetwork as qn
|
|
from PyQt4 import QtOpenGL as qgl
|
|
from PyQt4 import QtSvg as qsvg
|
|
qprint = qg
|
|
QSortFilterProxyModel = qg.QSortFilterProxyModel
|
|
QItemSelectionModel = qg.QItemSelectionModel
|
|
QItemSelection = qg.QItemSelection
|
|
|
|
getSaveFileName = qw.QFileDialog.getSaveFileName
|
|
|
|
class QPixmapCache(qg.QPixmapCache):
|
|
def cached(self, key):
|
|
pixmap = qg.QPixmap()
|
|
found = self.find(key, pixmap)
|
|
if found:
|
|
return pixmap
|
|
return found
|
|
|
|
|
|
try:
|
|
vers = qc.QVersionNumber.fromString
|
|
except AttributeError:
|
|
def vers(s):
|
|
return tuple(s.split('.'))
|
|
|
|
# Application attribute has to be set for QWebView
|
|
if vers(Qt.QT_VERSION_STR) >= vers('5.4.0'):
|
|
Qt.QCoreApplication.setAttribute(qc.Qt.AA_ShareOpenGLContexts, True)
|