Source code for pyqtgraph.graphicsItems.GraphicsWidget
from ..Qt import QtCore, QtGui, QtWidgets
from .GraphicsItem import GraphicsItem
__all__ = ['GraphicsWidget']
[docs]
class GraphicsWidget(GraphicsItem, QtWidgets.QGraphicsWidget):
_qtBaseClass = QtWidgets.QGraphicsWidget
[docs]
def __init__(self, *args, **kwargs):
"""
**Bases:** :class:`GraphicsItem <pyqtgraph.GraphicsItem>`, :class:`QtWidgets.QGraphicsWidget`
Extends QGraphicsWidget with several helpful methods and workarounds for PyQt bugs.
Most of the extra functionality is inherited from :class:`GraphicsItem <pyqtgraph.GraphicsItem>`.
"""
QtWidgets.QGraphicsWidget.__init__(self, *args, **kwargs)
GraphicsItem.__init__(self)
# cache bounding rect and geometry
self._boundingRectCache = self._previousGeometry = None
self._painterPathCache = None
self.geometryChanged.connect(self._resetCachedProperties)
# done by GraphicsItem init
# GraphicsScene.registerObject(self) # workaround for pyqt bug in GraphicsScene.items()
# Removed due to https://bugreports.qt-project.org/browse/PYSIDE-86
# def itemChange(self, change, value):
# # BEWARE: Calling QGraphicsWidget.itemChange can lead to crashing!
# # ret = QtWidgets.QGraphicsWidget.itemChange(self, change, value) # segv occurs here
# # The default behavior is just to return the value argument, so we'll do that
# # without calling the original method.
# ret = value
# if change in [self.ItemParentHasChanged, self.ItemSceneHasChanged]:
# self._updateView()
# return ret
def _resetCachedProperties(self):
self._boundingRectCache = self._previousGeometry = None
self._painterPathCache = None
def setFixedHeight(self, h):
self.setMaximumHeight(h)
self.setMinimumHeight(h)
def setFixedWidth(self, h):
self.setMaximumWidth(h)
self.setMinimumWidth(h)
def height(self):
return self.geometry().height()
def width(self):
return self.geometry().width()
def boundingRect(self):
geometry = self.geometry()
if geometry != self._previousGeometry:
self._painterPathCache = None
br = self.mapRectFromParent(geometry).normalized()
self._boundingRectCache = br
self._previousGeometry = geometry
else:
br = self._boundingRectCache
return QtCore.QRectF(br)
def shape(self):
p = self._painterPathCache
if p is None:
self._painterPathCache = p = QtGui.QPainterPath()
p.addRect(self.boundingRect())
return p