def paintEvent(self, event): super(SelectArea, self).paintEvent(event) painter = QPainter(self) drawRegion = QRegion(self.pixmap.rect()) drawRegion = drawRegion.subtract(QRegion(self.selected)) painter.setClipRegion(drawRegion) painter.setBrush(QBrush(QColor(0, 0, 0, 120))) painter.drawRect(self.pixmap.rect()) painter.setClipping(False) if self.selected: # направляющие линии painter.setPen(QPen(QColor(255, 255, 255))) painter.setBrush(QBrush(QColor(0, 0, 0, 0))) vertical = self.selected.normalized() vertical.setLeft(-1) vertical.setRight(self.pixmap.rect().right() + 1) horizontal = self.selected.normalized() horizontal.setTop(-1) horizontal.setBottom(self.pixmap.rect().bottom() + 1) painter.drawRects( vertical, horizontal ) # координаты начала bound = self.pixmap.rect() bound.setBottomRight(self.selected.topLeft() - QPoint(5, 5)) painter.drawText( bound, Qt.AlignBottom | Qt.AlignRight, '(%d, %d)' % (self.selected.topLeft().x(), self.selected.topLeft().y()) ) # ширина/высота bound = self.pixmap.rect() bound.setTopLeft(self.selected.bottomRight() + QPoint(5, 5)) painter.drawText( bound, Qt.AlignTop | Qt.AlignLeft, '(%d, %d)' % (self.selected.width(), self.selected.height()) )
def paintEvent(self, QPaintEvent): p = QPainter(self.viewport()) clipPath = QPainterPath() clipPath.addEllipse(0, 0, 100, 100) p.setRenderHint(QPainter.Antialiasing) p.setClipPath(clipPath) p.setClipping(False) p.setPen(Qt.gray) p.drawPath(clipPath) self.update()