def paintEvent(self, arg__1: QPaintEvent): # super(Push, self).paintEvent(arg__1) # lightgrey painter = QPainter() painter.begin(self) pen = QPen(QColor(162, 181, 205), 2, Qt.SolidLine) painter.setBrush(QBrush(QColor(255, 255, 255))) painter.setPen(pen) painter.setRenderHint(QPainter.Antialiasing, True) rect = QRect() rect.moveTo(1, 10) rect.setWidth(140) rect.setHeight(140) painter.drawRoundedRect(rect, 5, 5) painter.drawConvexPolygon( [QPoint(60, 10), QPoint(80, 10), QPoint(70, 1)]) pen.setColor(QColor(255, 255, 255)) painter.setPen(pen) painter.drawLine(63, 10, 77, 10) pen.setWidth(1) painter.setPen(pen) painter.drawPoints([QPoint(61, 10), QPoint(78, 10)]) painter.end()
def paint(self, painter: QPainter): brush = QBrush(QColor("#007430")) painter.setBrush(brush) painter.setPen(Qt.NoPen) painter.setRenderHint(QPainter.Antialiasing) itemSize = self.size() painter.drawRoundedRect(0, 0, itemSize.width(), itemSize.height() - 10, 10, 10) if self.rightAligned: points = [ QPointF(itemSize.width() - 10.0, itemSize.height() - 10.0), QPointF(itemSize.width() - 20.0, itemSize.height()), QPointF(itemSize.width() - 30.0, itemSize.height() - 10.0), ] else: points = [ QPointF(10.0, itemSize.height() - 10.0), QPointF(20.0, itemSize.height()), QPointF(30.0, itemSize.height() - 10.0), ] painter.drawConvexPolygon(points)
def drawPointerIndicator(self, painter: QPainter) -> None: if not self.__showPointer: return radius: int = self.__radiusCircle - 15 painter.save() painter.setPen(Qt.NoPen) painter.setBrush(self.__progressColor) pts: QPolygon = QPolygon() pts.append(QPoint(-8, 0)) pts.append(QPoint(8, 0)) pts.append(QPoint(0, radius)) painter.rotate(self.__startAngle) degRotate: float = (360.0 - self.__startAngle - self.__endAngle) / ( self.__maxValue - self.__minValue) * (self.__value - self.__minValue) painter.rotate(degRotate) painter.drawConvexPolygon(pts) # 绘制中心圆点 radius = radius // 4 painter.drawEllipse(-radius, -radius, radius * 2, radius * 2) painter.restore()
def drawPointerIndicatorR(self, painter: QPainter) -> None: if not self.__showPointer: return radius: int = self.__radiusCircle - 15 painter.save() pen: QPen = QPen() pen.setWidth(1) pen.setColor(self.__progressColor) painter.setPen(pen) painter.setBrush(self.__progressColor) pts: QPolygon = QPolygon() pts.append(QPoint(-8, 0)) pts.append(QPoint(8, 0)) pts.append(QPoint(0, radius)) painter.rotate(self.__startAngle) degRotate: float = (360.0 - self.__startAngle - self.__endAngle) / ( self.__maxValue - self.__minValue) * (self.__value - self.__minValue) painter.rotate(degRotate) painter.drawConvexPolygon(pts) # 增加绘制圆角直线,与之前三角形重叠,形成圆角指针 pen.setCapStyle(Qt.RoundCap) pen.setWidthF(4) painter.setPen(pen) painter.drawLine(0, 0, 0, radius) # 绘制中心圆点 radius = radius // 4 painter.drawEllipse(-radius, -radius, radius * 2, radius * 2) painter.restore()
def paintEvent(self, event): side = min(self.width(), self.height()) time = QTime.currentTime() painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing) painter.translate(self.width() / 2, self.height() / 2) painter.scale(side / 200.0, side / 200.0) painter.setPen(Qt.NoPen) painter.setBrush(AnalogClock.hourColor) painter.save() painter.rotate(30.0 * ((time.hour() + time.minute() / 60.0))) painter.drawConvexPolygon(AnalogClock.hourHand) painter.restore() painter.setPen(AnalogClock.hourColor) for i in range(12): painter.drawLine(88, 0, 96, 0) painter.rotate(30.0) painter.setPen(Qt.NoPen) painter.setBrush(AnalogClock.minuteColor) painter.save() painter.rotate(6.0 * (time.minute() + time.second() / 60.0)) painter.drawConvexPolygon(AnalogClock.minuteHand) painter.restore() painter.setPen(AnalogClock.minuteColor) for j in range(60): if (j % 5) != 0: painter.drawLine(92, 0, 96, 0) painter.rotate(6.0)
def paint(self, painter: QtGui.QPainter, option: QtWidgets.QStyleOptionGraphicsItem, widget=None) -> None: super(ArrowButtonItem, self).paint(painter, option, widget) # draw arrow points = tripoints() poly = QtGui.QPolygon(points) if self.flip: # flip arrow direction points[1].setX(-points[1].x()) poly.translate(int(self.rect().topRight().x()), int(self.rect().topRight().y())) painter.drawConvexPolygon(poly)
def paintEvent(self, event): side = min(self.width(), self.height()) curr_time = self._time painter = QPainter() painter.begin(self) painter.setRenderHint(QPainter.Antialiasing) painter.translate(self.width() / 2, self.height() / 2) # draw clock frame painter.setBrush(QBrush(self.background_color)) r = side / 2 painter.drawEllipse(QPoint(0, 0), side / 2, side / 2) for i in range(0, 12): x, y = self.rotate_point(0, -r * 0.95, i * 360 / 12) painter.drawEllipse(x - 3, y - 3, 6, 6) painter.setPen(self.text_color) for i in range(0, 12): x, y = self.rotate_point(0, -r * 0.85, i * 360 / 12) painter.drawText(QRect(x - 10, y - 10, 20, 20), Qt.AlignCenter, "%d" % i) painter.setPen(self.background_color) painter.setBrush(QBrush(self.min_pin_color)) for j in range(0, 60): if j % 5 != 0: x, y = self.rotate_point(0, -r * 0.95, j * 360 / 60) painter.drawEllipse(x - 1, y - 1, 2, 2) painter.setClipping(False) # draw hands painter.setBrush(QBrush(self.hour_pin_color)) painter.save() self.hour_pin[2] = QPoint(0, int(-r * 0.6)) painter.rotate(30.0 * (curr_time.hour() + curr_time.minute() / 60.0)) painter.drawConvexPolygon(self.hour_pin) painter.restore() painter.setBrush(QBrush(self.min_pin_color)) painter.save() self.minute_pin[2] = QPoint(0, int(-r * 0.9)) painter.rotate(6.0 * (curr_time.minute() + curr_time.second() / 60.0)) painter.drawConvexPolygon(self.minute_pin) painter.restore() painter.end()
def drawControls(self, painter: QtGui.QPainter): """draw left and right arrows, and maybe dots above for dragging""" if not self.isLast(): points = tripoints() poly = QtGui.QPolygon(points) #poly.translate(self.right(), 0) poly.translate(self.topRight()) painter.drawConvexPolygon(poly) if not self.isFirst(): points = tripoints() points[1].setX(-points[1].x()) poly = QtGui.QPolygon(points) #poly.translate(self.left(), 0) poly.translate(self.bottomLeft()) painter.drawConvexPolygon(poly)
class QPainterDrawText(unittest.TestCase): def setUp(self): self.painter = QPainter() self.text = "teste!" def tearDown(self): del self.text del self.painter def testDrawText(self): # bug #254 rect = self.painter.drawText(100, 100, 100, 100, Qt.AlignCenter | Qt.TextWordWrap, self.text) self.assert_(isinstance(rect, QRect)) def testDrawTextWithRect(self): # bug #225 rect = QRect(100, 100, 100, 100) newRect = self.painter.drawText(rect, Qt.AlignCenter | Qt.TextWordWrap, self.text) self.assert_(isinstance(newRect, QRect)) def testDrawTextWithRectF(self): """QPainter.drawText(QRectF, ... ,QRectF*) inject code""" rect = QRectF(100, 52.3, 100, 100) newRect = self.painter.drawText(rect, Qt.AlignCenter | Qt.TextWordWrap, self.text) self.assert_(isinstance(newRect, QRectF)) def testDrawOverloads(self): """Calls QPainter.drawLines overloads, if something is wrong Exception and chaos ensues. Bug #395""" self.painter.drawLines([QLine(QPoint(0, 0), QPoint(1, 1))]) self.painter.drawLines([QPoint(0, 0), QPoint(1, 1)]) self.painter.drawLines([QPointF(0, 0), QPointF(1, 1)]) self.painter.drawLines([QLineF(QPointF(0, 0), QPointF(1, 1))]) self.painter.drawPoints([QPoint(0, 0), QPoint(1, 1)]) self.painter.drawPoints([QPointF(0, 0), QPointF(1, 1)]) self.painter.drawConvexPolygon( [QPointF(10.0, 80.0), QPointF(20.0, 10.0), QPointF(80.0, 30.0), QPointF(90.0, 70.0)] ) self.painter.drawConvexPolygon([QPoint(10.0, 80.0), QPoint(20.0, 10.0), QPoint(80.0, 30.0), QPoint(90.0, 70.0)]) self.painter.drawPolygon([QPointF(10.0, 80.0), QPointF(20.0, 10.0), QPointF(80.0, 30.0), QPointF(90.0, 70.0)]) self.painter.drawPolygon([QPoint(10.0, 80.0), QPoint(20.0, 10.0), QPoint(80.0, 30.0), QPoint(90.0, 70.0)]) self.painter.drawPolyline([QPointF(10.0, 80.0), QPointF(20.0, 10.0), QPointF(80.0, 30.0), QPointF(90.0, 70.0)]) self.painter.drawPolyline([QPoint(10.0, 80.0), QPoint(20.0, 10.0), QPoint(80.0, 30.0), QPoint(90.0, 70.0)])
def drawPointerTriangle(self, painter: QPainter) -> None: if not self.__showPointer: return radius: int = 20 offset: int = self.__radiusCircle - 25 painter.save() painter.setPen(Qt.NoPen) painter.setBrush(self.__progressColor) pts: QPolygon = QPolygon() pts.append(QPoint(-radius // 2, offset)) pts.append(QPoint(radius // 2, offset)) pts.append(QPoint(0, radius + offset)) painter.rotate(self.__startAngle) degRotate: float = (360.0 - self.__startAngle - self.__endAngle) / ( self.__maxValue - self.__minValue) * (self.__value - self.__minValue) painter.rotate(degRotate) painter.drawConvexPolygon(pts) painter.restore()
class QPainterDrawText(unittest.TestCase): def setUp(self): self.painter = QPainter() self.text = 'teste!' def tearDown(self): del self.text del self.painter def testDrawText(self): # bug #254 rect = self.painter.drawText(100, 100, 100, 100, Qt.AlignCenter | Qt.TextWordWrap, self.text) self.assertTrue(isinstance(rect, QRect)) def testDrawTextWithRect(self): # bug #225 rect = QRect(100, 100, 100, 100) newRect = self.painter.drawText(rect, Qt.AlignCenter | Qt.TextWordWrap, self.text) self.assertTrue(isinstance(newRect, QRect)) def testDrawTextWithRectF(self): '''QPainter.drawText(QRectF, ... ,QRectF*) inject code''' rect = QRectF(100, 52.3, 100, 100) newRect = self.painter.drawText(rect, Qt.AlignCenter | Qt.TextWordWrap, self.text) self.assertTrue(isinstance(newRect, QRectF)) def testDrawOverloads(self): '''Calls QPainter.drawLines overloads, if something is wrong Exception and chaos ensues. Bug #395''' self.painter.drawLines([QLine(QPoint(0,0), QPoint(1,1))]) self.painter.drawLines([QPoint(0,0), QPoint(1,1)]) self.painter.drawLines([QPointF(0,0), QPointF(1,1)]) self.painter.drawLines([QLineF(QPointF(0,0), QPointF(1,1))]) self.painter.drawPoints([QPoint(0,0), QPoint(1,1)]) self.painter.drawPoints([QPointF(0,0), QPointF(1,1)]) self.painter.drawConvexPolygon([QPointF(10.0, 80.0), QPointF(20.0, 10.0), QPointF(80.0, 30.0), QPointF(90.0, 70.0)]) self.painter.drawConvexPolygon([QPoint(10.0, 80.0), QPoint(20.0, 10.0), QPoint(80.0, 30.0), QPoint(90.0, 70.0)]) self.painter.drawPolygon([QPointF(10.0, 80.0), QPointF(20.0, 10.0), QPointF(80.0, 30.0), QPointF(90.0, 70.0)]) self.painter.drawPolygon([QPoint(10.0, 80.0), QPoint(20.0, 10.0), QPoint(80.0, 30.0), QPoint(90.0, 70.0)]) self.painter.drawPolyline([QPointF(10.0, 80.0), QPointF(20.0, 10.0), QPointF(80.0, 30.0), QPointF(90.0, 70.0)]) self.painter.drawPolyline([QPoint(10.0, 80.0), QPoint(20.0, 10.0), QPoint(80.0, 30.0), QPoint(90.0, 70.0)])
def paintEvent(self, event): hour_hand = [QPoint(7, 8), QPoint(-7, 8), QPoint(0, -40)] minute_hand = [QPoint(7, 8), QPoint(-7, 8), QPoint(0, -70)] second_hand = [QPoint(2, 8), QPoint(-2, 8), QPoint(0, -90)] hour_color = QColor(0x8b, 0, 0xff) minute_color = QColor(0, 0xbf, 0xff, 191) second_color = QColor(0xff, 0x82, 0xab, 191) side = min(self.width(), self.height()) painter = QPainter(self) # pre settings painter.setRenderHint(QPainter.Antialiasing) painter.translate(self.width() / 2, self.height() / 2) painter.scale(side / 200, side / 200) painter.setPen(Qt.NoPen) # draw hour scale & hour hand painter.setBrush(hour_color) painter.save() painter.rotate(30 * (self._hour + self._minute / 60)) painter.drawConvexPolygon(hour_hand) painter.restore() painter.setPen(hour_color) for i in range(12): painter.drawLine(88, 0, 96, 0) painter.rotate(30) painter.setPen(Qt.NoPen) # draw minute scale & minute hand painter.setBrush(minute_color) painter.save() painter.rotate(6 * (self._minute + self._second / 60)) painter.drawConvexPolygon(minute_hand) painter.restore() painter.setPen(minute_color) for i in range(60): if i % 5: painter.drawLine(92, 0, 96, 0) painter.rotate(6.0) painter.setPen(Qt.NoPen) # draw second scale & second hand painter.setBrush(second_color) painter.save() painter.rotate(6 * self._second) painter.drawConvexPolygon(second_hand) painter.restore()