def paint( self, painter: QtGui.QPainter, option: QtWidgets.QStyleOptionGraphicsItem, widget: QtWidgets.QWidget = None, ): view = next(iter(self.scene().views())) painter.setRenderHint(QtGui.QPainter.Antialiasing) painter.setFont(self.font) painter.setPen(self.pen) fm = painter.fontMetrics() painter.drawLine(self.line) if not self.line.p1().isNull(): pen = QtGui.QPen(self.pen) pen.setWidth(10) painter.setPen(pen) painter.drawPoints([self.line.p1(), self.line.p2()]) painter.setPen(self.pen) if view is not None and self.text != "": angle = self.line.angle() if 90 < angle < 270: angle -= 180 center = view.mapFromScene(self.line.center()) length = ( view.mapFromScene(QtCore.QRectF(0, 0, self.line.length(), 1)) .boundingRect() .width() ) width = fm.boundingRect(self.text).width() if width < length * 0.9: painter.save() painter.resetTransform() transform = QtGui.QTransform() transform.translate(center.x(), center.y()) transform.rotate(-angle) painter.setTransform(transform) painter.drawText(-width / 2.0, -fm.descent(), self.text) painter.restore()
def patch_paintEvent(self, event): p = QPainter(self) rect = event.rect() # Translate transform = QTransform() transform.translate(rect.width() / 2, rect.height() / 2) transform.rotate(self.current_rotation) transform.translate(-rect.width() / 2, -rect.height() / 2) p.setTransform(transform) # Calculate rect to center the pixmap on the QLabel. prect = self.pixmap().rect() rect.adjust( (rect.width() - prect.width()) / 2, self.current_y + (rect.height() - prect.height()) / 2, -(rect.width() - prect.width()) / 2, self.current_y + -(rect.height() - prect.height()) / 2, ) p.drawPixmap(rect, self.pixmap())