Good day.
I am attempting to rapidly animate an ellipse in the form of a
GraphicsObject in a PlotWidget. When the parameters of the ellipse changes,
I call the requisite :
self.update()
self.informViewBoundsChanged()
However, this appears to only schedule an update of the scene for later.
This is not sufficient for me, as I will be rapidly updating the parameters
of the GraphicsObject and require update speeds on the same order as
PlotDataItem, i.e. near-instantaneous.
Could this perhaps be solved by subclassing an implementation of Viewbox
that catches an emitted signal from the GraphicsObject and forces an
update? I believe this is how instantaneous updates of PlotDataItem is
achieved, through the sigPlotChanged signal.
Anyways, the following is the class definition for the custom ellipse
GraphicsObject.
class EllipseItem(pg.GraphicsObject):
def __init__(self, center:Union[float,List[float]],
radius:Union[float,List[float]]):
pg.GraphicsObject.__init__(self)
self.center = None
self.radius = None
self.setCenter(center)
self.setRadius(radius)
def setCenter(self,center:Union[float,List[float]]):
self.center = center
self.generatePicture()
def setRadius(self,radius:Union[float,List[float]]):
self.radius = radius
self.generatePicture()
def generatePicture(self):
if self.center is not None and self.radius is not None:
self.picture = QtGui.QPicture()
p = QtGui.QPainter(self.picture)
p.setPen(pg.mkPen('w'))
try:
r1 = self.radius[0]
r2 = self.radius[1]
except (TypeError, IndexError):
r1 = r2 = self.radius
try:
c1 = self.center[0] - r1
c2 = self.center[1] - r2
except (TypeError, IndexError):
c1 = self.center - r1
c2 = self.center - r2
p.drawEllipse(QtCore.QRectF(c1,c2,r1*2,r2*2))
p.end()
self.update()
self.informViewBoundsChanged()
def paint(self, p, *args):
p.drawPicture(0, 0, self.picture)
def boundingRect(self):
return QtCore.QRectF(self.picture.boundingRect())
The following is a minimal working example showing that update is not
immediate. Note the delay between updating the radius of the Ellipse and
the change becoming apparent in the PlotWindow.
from <filename> import EllipseItem
pw = pg.PlotWidget()
item = EllipseItem([0,1],[1,0.5])
plotui.addItem(item)
item.setRadius([0.5,1])
Regards,
Magne Lauritzen
--
You received this message because you are subscribed to the Google Groups
"pyqtgraph" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/pyqtgraph/36ee5ab1-1f45-4691-9e1e-f2a8fbf582f4o%40googlegroups.com.