Merge branch 'pyqt5' of https://github.com/mfitzp/pyqtgraph into mfitzp-pyqt5

This commit is contained in:
Luke Campagnola 2014-03-26 13:56:32 -04:00
commit 8046f1e4ff
5 changed files with 80 additions and 15 deletions

View File

@ -11,25 +11,40 @@ This module exists to smooth out some of the differences between PySide and PyQt
import sys, re
PYSIDE = 0
PYQT4 = 1
PYQT5 = 2
USE_QT_PY = None
## Automatically determine whether to use PyQt or PySide.
## This is done by first checking to see whether one of the libraries
## is already imported. If not, then attempt to import PyQt4, then PySide.
if 'PyQt4' in sys.modules:
USE_PYSIDE = False
USE_QT_PY = PYQT4
if 'PyQt5' in sys.modules:
USE_QT_PY = PYQT5
elif 'PySide' in sys.modules:
USE_PYSIDE = True
USE_QT_PY = PYSIDE
else:
try:
import PyQt4
USE_PYSIDE = False
USE_QT_PY = PYQT4
except ImportError:
try:
import PySide
USE_PYSIDE = True
import PyQt5
USE_QT_PY = PYQT5
except ImportError:
raise Exception("PyQtGraph requires either PyQt4 or PySide; neither package could be imported.")
try:
import PySide
USE_QT_PY = PYSIDE
except:
pass
if USE_PYSIDE:
if USE_QT_PY == None:
raise Exception("PyQtGraph requires one of PyQt4, PyQt5 or PySide; none of these packages could be imported.")
if USE_QT_PY == PYSIDE:
from PySide import QtGui, QtCore, QtOpenGL, QtSvg
import PySide
try:
@ -81,9 +96,9 @@ if USE_PYSIDE:
base_class = eval('QtGui.%s'%widget_class)
return form_class, base_class
else:
elif USE_QT_PY == PYQT4:
from PyQt4 import QtGui, QtCore, uic
try:
from PyQt4 import QtSvg
@ -103,10 +118,59 @@ else:
QtCore.Signal = QtCore.pyqtSignal
VERSION_INFO = 'PyQt4 ' + QtCore.PYQT_VERSION_STR + ' Qt ' + QtCore.QT_VERSION_STR
elif USE_QT_PY == PYQT5:
# We're using PyQt5 which has a different structure so we're going to use a shim to
# recreate the Qt4 structure for Qt5
from PyQt5 import QtGui, QtCore, QtWidgets, Qt, uic
try:
from PyQt5 import QtSvg
except ImportError:
pass
try:
from PyQt5 import QtOpenGL
except ImportError:
pass
# Re-implement deprecated APIs
def scale(self, sx, sy):
self.setTransform(QtGui.QTransform.fromScale(sx, sy), True)
QtWidgets.QGraphicsItem.scale = scale
def rotate(self, angle):
self.setRotation(self.rotation() + angle)
QtWidgets.QGraphicsItem.rotate = rotate
def translate(self, dx, dy):
self.setTransform(QtGui.QTransform.fromTranslate(dx, dy), True)
QtWidgets.QGraphicsItem.translate = translate
def setMargin(self, i):
self.setContentsMargins(i, i, i, i)
QtWidgets.QGridLayout.setMargin = setMargin
def setResizeMode(self, mode):
self.setSectionResizeMode(mode)
QtWidgets.QHeaderView.setResizeMode = setResizeMode
QtGui.QApplication = QtWidgets.QApplication
QtGui.QGraphicsScene = QtWidgets.QGraphicsScene
QtGui.QGraphicsObject = QtWidgets.QGraphicsObject
QtGui.QGraphicsWidget = QtWidgets.QGraphicsWidget
QtGui.QApplication.setGraphicsSystem = None
QtCore.Signal = Qt.pyqtSignal
# Import all QtWidgets objects into QtGui
for o in dir(QtWidgets):
if o.startswith('Q'):
setattr(QtGui, o, getattr(QtWidgets,o) )
## Make sure we have Qt >= 4.7
versionReq = [4, 7]
QtVersion = PySide.QtCore.__version__ if USE_PYSIDE else QtCore.QT_VERSION_STR
USE_PYSIDE = USE_QT_PY == PYSIDE # still needed internally elsewhere
QtVersion = PySide.QtCore.__version__ if USE_QT_PY == PYSIDE else QtCore.QT_VERSION_STR
m = re.match(r'(\d+)\.(\d+).*', QtVersion)
if m is not None and list(map(int, m.groups())) < versionReq:
print(list(map(int, m.groups())))

View File

@ -41,7 +41,8 @@ elif 'darwin' in sys.platform: ## openGL can have a major impact on mac, but als
useOpenGL = False
if QtGui.QApplication.instance() is not None:
print('Warning: QApplication was created before pyqtgraph was imported; there may be problems (to avoid bugs, call QApplication.setGraphicsSystem("raster") before the QApplication is created).')
QtGui.QApplication.setGraphicsSystem('raster') ## work around a variety of bugs in the native graphics system
if QtGui.QApplication.setGraphicsSystem:
QtGui.QApplication.setGraphicsSystem('raster') ## work around a variety of bugs in the native graphics system
else:
useOpenGL = False ## on windows there's a more even performance / bugginess tradeoff.

View File

@ -7,7 +7,7 @@
#
# WARNING! All changes made in this file will be lost!
from PyQt4 import QtCore, QtGui
from ...Qt import QtCore, QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8

View File

@ -7,7 +7,7 @@
#
# WARNING! All changes made in this file will be lost!
from PyQt4 import QtCore, QtGui
from ...Qt import QtCore, QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8

View File

@ -7,7 +7,7 @@
#
# WARNING! All changes made in this file will be lost!
from PyQt4 import QtCore, QtGui
from ..Qt import QtCore, QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8