diff options
author | Christian Tismer <[email protected]> | 2022-01-26 12:49:43 +0100 |
---|---|---|
committer | Christian Tismer <[email protected]> | 2022-01-26 16:47:13 +0000 |
commit | b61f735acd8fa2e43a68d7d90f977d8f1506052a (patch) | |
tree | 9a5f4fb9debe1d7d51119ea9e169e58bc47bc62f /examples/widgets/painting | |
parent | dc2046124f132ba0187d1bff97364448288b1cd6 (diff) |
examples: Turn most QPainter instances into context managers
After the new context manager is in place, most of
the examples benefit from moving QPainter into a
`with` statement.
The comments concerning PyPy could be removed, again.
[ChangeLog][PySide6] The examples are updated to use the new
context manager for QPainter.
Task-number: PYSIDE-535
Change-Id: Idf7e1f734d549ed663383ffbb2416297ebb1e0c7
Reviewed-by: Christian Tismer <[email protected]>
Diffstat (limited to 'examples/widgets/painting')
-rw-r--r-- | examples/widgets/painting/basicdrawing/basicdrawing.py | 102 | ||||
-rw-r--r-- | examples/widgets/painting/concentriccircles/concentriccircles.py | 35 | ||||
-rw-r--r-- | examples/widgets/painting/painter/painter.py | 6 | ||||
-rw-r--r-- | examples/widgets/painting/plot/plot.py | 12 |
4 files changed, 73 insertions, 82 deletions
diff --git a/examples/widgets/painting/basicdrawing/basicdrawing.py b/examples/widgets/painting/basicdrawing/basicdrawing.py index a0d5bda7c..e89d694fe 100644 --- a/examples/widgets/painting/basicdrawing/basicdrawing.py +++ b/examples/widgets/painting/basicdrawing/basicdrawing.py @@ -114,58 +114,56 @@ class RenderArea(QWidget): start_angle = 30 * 16 arc_length = 120 * 16 - painter = QPainter(self) - painter.setPen(self.pen) - painter.setBrush(self.brush) - if self.antialiased: - painter.setRenderHint(QPainter.Antialiasing) - - for x in range(0, self.width(), 100): - for y in range(0, self.height(), 100): - painter.save() - painter.translate(x, y) - if self.transformed: - painter.translate(50, 50) - painter.rotate(60.0) - painter.scale(0.6, 0.9) - painter.translate(-50, -50) - - if self.shape == RenderArea.Line: - painter.drawLine(rect.bottomLeft(), rect.topRight()) - elif self.shape == RenderArea.Points: - painter.drawPoints(RenderArea.points) - elif self.shape == RenderArea.Polyline: - painter.drawPolyline(RenderArea.points) - elif self.shape == RenderArea.Polygon: - painter.drawPolygon(RenderArea.points) - elif self.shape == RenderArea.Rect: - painter.drawRect(rect) - elif self.shape == RenderArea.RoundedRect: - painter.drawRoundedRect(rect, 25, 25, Qt.RelativeSize) - elif self.shape == RenderArea.Ellipse: - painter.drawEllipse(rect) - elif self.shape == RenderArea.Arc: - painter.drawArc(rect, start_angle, arc_length) - elif self.shape == RenderArea.Chord: - painter.drawChord(rect, start_angle, arc_length) - elif self.shape == RenderArea.Pie: - painter.drawPie(rect, start_angle, arc_length) - elif self.shape == RenderArea.Path: - painter.drawPath(path) - elif self.shape == RenderArea.Text: - qv = qVersion() - painter.drawText(rect, Qt.AlignCenter, - f"PySide 6\nQt {qv}") - elif self.shape == RenderArea.Pixmap: - painter.drawPixmap(10, 10, self.pixmap) - - painter.restore() - - painter.setPen(self.palette().dark().color()) - painter.setBrush(Qt.NoBrush) - painter.drawRect(QRect(0, 0, self.width() - 1, self.height() - 1)) - # QPainter needs an explicit end() in PyPy. This will become a context manager in 6.3. - painter.end() + with QPainter(self) as painter: + painter.setPen(self.pen) + painter.setBrush(self.brush) + if self.antialiased: + painter.setRenderHint(QPainter.Antialiasing) + + for x in range(0, self.width(), 100): + for y in range(0, self.height(), 100): + painter.save() + painter.translate(x, y) + if self.transformed: + painter.translate(50, 50) + painter.rotate(60.0) + painter.scale(0.6, 0.9) + painter.translate(-50, -50) + + if self.shape == RenderArea.Line: + painter.drawLine(rect.bottomLeft(), rect.topRight()) + elif self.shape == RenderArea.Points: + painter.drawPoints(RenderArea.points) + elif self.shape == RenderArea.Polyline: + painter.drawPolyline(RenderArea.points) + elif self.shape == RenderArea.Polygon: + painter.drawPolygon(RenderArea.points) + elif self.shape == RenderArea.Rect: + painter.drawRect(rect) + elif self.shape == RenderArea.RoundedRect: + painter.drawRoundedRect(rect, 25, 25, Qt.RelativeSize) + elif self.shape == RenderArea.Ellipse: + painter.drawEllipse(rect) + elif self.shape == RenderArea.Arc: + painter.drawArc(rect, start_angle, arc_length) + elif self.shape == RenderArea.Chord: + painter.drawChord(rect, start_angle, arc_length) + elif self.shape == RenderArea.Pie: + painter.drawPie(rect, start_angle, arc_length) + elif self.shape == RenderArea.Path: + painter.drawPath(path) + elif self.shape == RenderArea.Text: + qv = qVersion() + painter.drawText(rect, Qt.AlignCenter, + f"PySide 6\nQt {qv}") + elif self.shape == RenderArea.Pixmap: + painter.drawPixmap(10, 10, self.pixmap) + + painter.restore() + + painter.setPen(self.palette().dark().color()) + painter.setBrush(Qt.NoBrush) + painter.drawRect(QRect(0, 0, self.width() - 1, self.height() - 1)) id_role = Qt.UserRole diff --git a/examples/widgets/painting/concentriccircles/concentriccircles.py b/examples/widgets/painting/concentriccircles/concentriccircles.py index 2786396cb..c6bada0a6 100644 --- a/examples/widgets/painting/concentriccircles/concentriccircles.py +++ b/examples/widgets/painting/concentriccircles/concentriccircles.py @@ -78,25 +78,22 @@ class CircleWidget(QWidget): self.update() def paintEvent(self, event): - painter = QPainter(self) - painter.setRenderHint(QPainter.Antialiasing, self.antialiased) - painter.translate(self.width() / 2, self.height() / 2) - - for diameter in range(0, 256, 9): - delta = abs((self._frame_no % 128) - diameter / 2) - alpha = 255 - (delta * delta) / 4 - diameter - if alpha > 0: - painter.setPen(QPen(QColor(0, diameter / 2, 127, alpha), 3)) - - if self._float_based: - painter.drawEllipse(QRectF(-diameter / 2.0, - -diameter / 2.0, diameter, diameter)) - else: - painter.drawEllipse(QRect(-diameter / 2, - -diameter / 2, diameter, diameter)) - - # QPainter needs an explicit end() in PyPy. This will become a context manager in 6.3. - painter.end() + with QPainter(self) as painter: + painter.setRenderHint(QPainter.Antialiasing, self.antialiased) + painter.translate(self.width() / 2, self.height() / 2) + + for diameter in range(0, 256, 9): + delta = abs((self._frame_no % 128) - diameter / 2) + alpha = 255 - (delta * delta) / 4 - diameter + if alpha > 0: + painter.setPen(QPen(QColor(0, diameter / 2, 127, alpha), 3)) + + if self._float_based: + painter.drawEllipse(QRectF(-diameter / 2.0, + -diameter / 2.0, diameter, diameter)) + else: + painter.drawEllipse(QRect(-diameter / 2, + -diameter / 2, diameter, diameter)) class Window(QWidget): diff --git a/examples/widgets/painting/painter/painter.py b/examples/widgets/painting/painter/painter.py index 3d5d95f10..6626afb7a 100644 --- a/examples/widgets/painting/painter/painter.py +++ b/examples/widgets/painting/painter/painter.py @@ -88,10 +88,8 @@ class PainterWidget(QWidget): Paint the Pixmap into the widget """ - painter = QPainter() - painter.begin(self) - painter.drawPixmap(0, 0, self.pixmap) - painter.end() + with QPainter(self) as painter: + painter.drawPixmap(0, 0, self.pixmap) def mousePressEvent(self, event: QMouseEvent): """Override from QWidget diff --git a/examples/widgets/painting/plot/plot.py b/examples/widgets/painting/plot/plot.py index a125c3253..30dc3e504 100644 --- a/examples/widgets/painting/plot/plot.py +++ b/examples/widgets/painting/plot/plot.py @@ -88,13 +88,11 @@ class PlotWidget(QWidget): self.update() def paintEvent(self, event): - painter = QPainter() - painter.begin(self) - rect = QRect(QPoint(0, 0), self.size()) - painter.fillRect(rect, Qt.white) - painter.translate(-self._points[0].x(), 0) - painter.drawPolyline(self._points) - painter.end() + with QPainter(self) as painter: + rect = QRect(QPoint(0, 0), self.size()) + painter.fillRect(rect, Qt.white) + painter.translate(-self._points[0].x(), 0) + painter.drawPolyline(self._points) if __name__ == "__main__": |