def paintEvent(self,event=None): painter = QPainter(self) pixmap=QPixmap(":/images/wheelfinal.png") #painter.begin(self) #painter.drawPixmap(QtCore.QRect(self.left, self.top, self.width, self.height), self.pixmap) painter.drawPixmap(self.rect(), pixmap) self.resize(pixmap.width(),pixmap.height()) pen = QPen(Qt.red, 3) painter.setPen(pen) painter.drawArc (self.disc_center-int(self.distance_from_center(self.points[0])) , self.disc_center - int(self.distance_from_center (self.points[0])) , 2*int(self.distance_from_center(self.points[0])) , 2*int(self.distance_from_center(self.points[0])) , int(16*self.hue_min) , int(16*(self.hue_max-self.hue_min)))#arc joining point 0 and point 1 painter.drawLine(int(self.points[0][0]),int(self.points[0][1]),int(self.points[3][0]),int(self.points[3][1]))#line joining point 0 and point 3 painter.drawArc(self.disc_center-int(self.distance_from_center(self.points[2])) , self.disc_center - int(self.distance_from_center (self.points[2])) , 2*int(self.distance_from_center(self.points[2])) , 2*int(self.distance_from_center(self.points[2])) , int(16*self.hue_min) , int(16*(self.hue_max-self.hue_min)))#arc joining point 2 and 3 painter.drawLine(int(self.points[1][0]),int(self.points[1][1]),int(self.points[2][0]),int(self.points[2][1]))#line joining point 1 and 2 self.update()
def drawValue(self, p: QPainter, baseRect: QRectF, value: float, delta: float): if value == self.m_min: return if self.m_barStyle == self.BarStyle.EXPAND: p.setBrush(self.palette().highlight()) p.setPen(QPen(self.palette().shadow().color(), self.m_dataPenWidth)) radius = (baseRect.height() / 2) / delta p.drawEllipse(baseRect.center(), radius, radius) return if self.m_barStyle == self.BarStyle.LINE: p.setPen(QPen(self.palette().highlight().color(), self.m_dataPenWidth)) p.setBrush(Qt.NoBrush) if value == self.m_max: p.drawEllipse(baseRect.adjusted(self.m_outlinePenWidth / 2, self.m_outlinePenWidth / 2, -self.m_outlinePenWidth / 2, -self.m_outlinePenWidth / 2)) else: arcLength = 360 / delta p.drawArc(baseRect.adjusted(self.m_outlinePenWidth / 2, self.m_outlinePenWidth / 2, -self.m_outlinePenWidth / 2, -self.m_outlinePenWidth / 2), int(self.m_nullPosition * 16), int(-arcLength * 16)) return dataPath = QPainterPath() dataPath.setFillRule(Qt.WindingFill) if value == self.m_max: dataPath.addEllipse(baseRect) else: arcLength = 360 / delta dataPath.moveTo(baseRect.center()) dataPath.arcTo(baseRect, self.m_nullPosition, -arcLength) dataPath.lineTo(baseRect.center()) p.setBrush(self.palette().highlight()) p.setPen(QPen(self.palette().shadow().color(), self.m_dataPenWidth)) p.drawPath(dataPath)
def paintEvent(self, event=None): painter = QPainter(self) pixmap = QPixmap(":/images/wheelfinal.png") # painter.begin(self) #painter.drawPixmap(QtCore.QRect(self.left, self.top, self.width, self.height), self.pixmap) painter.drawPixmap(self.rect(), pixmap) self.resize(pixmap.width(), pixmap.height()) pen = QPen(Qt.red, 3) painter.setPen(pen) painter.drawArc(self.disc_center-int(self.distance_from_center(self.points[0])), self.disc_center - int(self.distance_from_center(self.points[0])), 2*int(self.distance_from_center(self.points[0])), 2*int(self.distance_from_center(self.points[0])), int(16*self.hue_min), int(16*(self.hue_max-self.hue_min))) # arc joining point 0 and point 1 painter.drawLine(int(self.points[0][0]), int(self.points[0][1]), int( self.points[3][0]), int(self.points[3][1])) # line joining point 0 and point 3 painter.drawArc(self.disc_center-int(self.distance_from_center(self.points[2])), self.disc_center - int(self.distance_from_center(self.points[2])), 2*int(self.distance_from_center(self.points[2])), 2*int(self.distance_from_center(self.points[2])), int(16*self.hue_min), int(16*(self.hue_max-self.hue_min))) # arc joining point 2 and 3 painter.drawLine(int(self.points[1][0]), int(self.points[1][1]), int( self.points[2][0]), int(self.points[2][1])) # line joining point 1 and 2 self.update()
def paintEvent(self, event): painter = QPainter() painter.begin(self) painter.setPen(Qt.blue) # 绘制弧:参数表示 x、y坐标和宽高 rect = QRect(0, 10, 200, 200) # 单位alen:等于1/16度 painter.drawArc(rect, 0, 50 * 16) # 通过弧长绘制圆 painter.setPen(Qt.red) painter.drawArc(220, 10, 100, 100, 0, 360 * 16) # 绘制带弦的弧 painter.drawChord(10, 120, 100, 100, 13, 130 * 16) # 绘制扇形 painter.drawPie(10, 240, 100, 100, 13, 130 * 16) # 绘制五边形 point1 = QPoint(140, 380) point2 = QPoint(270, 420) point3 = QPoint(290, 512) point4 = QPoint(290, 588) point5 = QPoint(200, 533) painter.drawPolygon(QPolygon([point1, point2, point3, point4, point5])) # 绘制图形 image = QImage('./images/color.png') painter.drawImage(QRect(400, 400, image.width(), image.height()), image) painter.end()
def paintEvent(self, QPaintEvent): painter = QPainter() painter.begin(self) painter.setPen(Qt.blue) #绘制弧 #左上角位置,宽度,高度 rect = QRect(0, 10, 100, 100) #alen:1 alen=1/16度 45*16=720 painter.drawArc(rect, 0, 50 * 16) #绘制圆 painter.setPen(Qt.red) painter.drawArc(120, 10, 100, 100, 0, 360 * 16) #绘制带弦的弧 painter.drawChord(10, 120, 100, 100, 12, 130 * 16) #绘制扇形 painter.drawPie(10, 240, 100, 100, 12, 130 * 16) #绘制椭圆 painter.drawEllipse(120, 120, 150, 100) #5边形 point1 = QPoint(140, 380) point2 = QPoint(270, 420) point3 = QPoint(219, 512) point4 = QPoint(290, 588) point5 = QPoint(120, 533) polygon = QPolygon([point1, point2, point3, point4, point5]) painter.drawPolygon(polygon) #绘制图像 image = QImage('./school.jpg') rect = QRect(300, 200, image.width() / 2, image.height() / 2) painter.drawImage(rect, image) # image.save('./school1.png') painter.end()
def paint(self, painter: QPainter, styleOptionGraphicsItem: QStyleOptionGraphicsItem, widget: QWidget = None): painter.setPen(self._pen) painter.setBrush(QBrush()) painter.drawArc(self.rect(), self.startAngle(), self.spanAngle())
def paintEvent(self, e): painter = QPainter(self) # Grey background fontSize = int(self.width() * 0.1) padding = 4 painter.setPen(QPen(self.textColor, 1, Qt.SolidLine)) painter.setFont(QFont("Monospace", fontSize)) fontHeight = int(fontSize * 1.5) valueText = str(self.value)[0:6] painter.drawText(QRect(0, 0, self.width(), self.height() * 0.9), Qt.AlignCenter, valueText) painter.setFont(QFont("Monospace", fontSize / 2)) painter.drawText( QRect(0, (self.height() * 0.9 / 2) + fontHeight / 2 + padding, self.width(), fontHeight / 2), Qt.AlignCenter, self.title) theta = clamp( interpolate(self.value, self.minValue, self.maxValue, 0, 360 * 16), 0, 360 * 16) barPadding = 20 painter.setPen(QPen(self.barColor, 30, Qt.SolidLine)) painter.translate(0, self.height()) painter.rotate(-90) painter.drawArc(barPadding, barPadding, self.width() - 2 * barPadding, self.height() - 2 * barPadding, 0, -theta)
def paintEvent(self, event): epyqlib.widgets.abstractwidget.AbstractWidget.paintEvent(self, event) painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing, True) painter.translate(self.width() / 2, self.height() / 2) diameter = self.dimension() - self.tweaked_thickness() radius = diameter / 2 rectangle = QRectF(-radius, -radius, diameter, diameter) maximum = max(abs(self.maximum), abs(self.minimum)) span_angle = self.angle_span * (self.value / maximum) if self.clockwise: span_angle = -span_angle pen = QPen() pen.setWidthF(self.tweaked_thickness()) pen.setCapStyle(Qt.RoundCap) pen.setColor(self.background_color) painter.setPen(pen) painter.drawEllipse(rectangle) pen.setColor(self.color) painter.setPen(pen) qt_span = arc_angle(span_angle) if qt_span == 0: qt_span = 1 painter.drawArc(rectangle, arc_angle(self.zero_angle), qt_span)
def paintEvent(self, event): rect = QRect(10, 20, 80, 60) path = QPainterPath() path.moveTo(20, 80) path.lineTo(20, 30) path.cubicTo(80, 0, 50, 50, 80, 80) startAngle = 30 * 16 arcLength = 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, startAngle, arcLength) elif self.shape == RenderArea.Chord: painter.drawChord(rect, startAngle, arcLength) elif self.shape == RenderArea.Pie: painter.drawPie(rect, startAngle, arcLength) elif self.shape == RenderArea.Path: painter.drawPath(path) elif self.shape == RenderArea.Text: painter.drawText(rect, Qt.AlignCenter, "PyQt by\nRiverbank Computing") 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))
def paintEvent(self, event): painter = QPainter() painter.begin(self) painter.setRenderHint(QPainter.Antialiasing) painter.setPen(QtCore.Qt.green) painter.setBrush(QtCore.Qt.white) painter.drawArc(100, 70, 300, 300, 0 * 16, 90 * 16)
def paintEvent(self, event): painter = QPainter() painter.begin(self) if self.tipo_dibujo == 'círculo': ancho = self.posicion_1[0] - self.posicion_2[0] alto = self.posicion_1[1] - self.posicion_2[1] rectangulo = QRect(self.posicion_1[0], self.posicion_1[1], ancho, alto) angulo_inicio = 0 longitud_arco = 360 * 16 painter.drawArc(rectangulo, angulo_inicio, longitud_arco) if self.tipo_dibujo == 'rectángulo': ancho = self.posicion_2[0] - self.posicion_1[0] alto = self.posicion_2[1] - self.posicion_1[1] painter.drawRect(self.posicion_1[0], self.posicion_1[1], ancho, alto) if self.tipo_dibujo == 'línea': painter.drawLine(self.posicion_1[0], self.posicion_1[1], self.posicion_2[0], self.posicion_2[1]) painter.end()
def paintEvent(self, event: QPaintEvent): QPushButton.paintEvent(self, event) if not self._delay: return # set progress parameter width = self.width - self.progress_width height = self.height - self.progress_width margin = self.progress_width // 2 value = self.value * 360 // self.MAX_VALUE # painter paint = QPainter() paint.begin(self) paint.setRenderHint(QPainter.HighQualityAntialiasing) # draw rectangle rect = QRect(0, 0, self.width, self.height) paint.setPen(Qt.NoPen) paint.drawRect(rect) # pen pen = QPen() color = QColor(self.progress_color) pen.setColor(color) pen.setWidth(11) # set round cap if self.progress_rounded_cap: pen.setCapStyle(Qt.RoundCap) # create arc / circular progress paint.setPen(pen) paint.drawArc(margin, margin, width, height, -90 * 16, -value * 16) paint.end()
def paintEvent(self, event): side = min(self.width(), self.height()) stime = QTime.currentTime().msec() painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing) #painter.translate(self.width() / 2, self.height() / 2) #painter.scale(side / 200.0, side / 200.0) painter.eraseRect( self.rect()) painter.save() #New Pen, because we want to set multiple properties : color and width p = QPen(self.TimerColor) p.setWidth(10) # Use our pen painter.setPen( p ) # Angle specified in 1/16th of a degree, so scale it up painter.drawArc(0, 0, 40, 40, 16.0 * 360 * stime / 1000, 120 * 16.0) painter.restore() #This be where object rendering happens, iter through obj collection self.lockShapes.acquire() try: for s in self.shapes: s.Render(painter, self.scale ) finally: self.lockShapes.release()
def draw_smile(self, qp: QPainter): qp.setPen(QColor(255, 0, 0)) k = self.slider.value() qp.drawEllipse(0, 0, 10 * k, 10 * k) qp.drawArc(2 * k, 6 * k, 6 * k, 2 * k, -30 * 16, -120 * 16) qp.drawEllipse(0, 0, 10 * k, 10 * k) qp.drawEllipse(2 * k, 2 * k, 2 * k, 2 * k) qp.drawEllipse(6 * k, 2 * k, 2 * k, 2 * k)
def paintEvent(self, event): if self.flag: qp = QPainter() qp.begin(self) qp.setPen(QColor(255, 175, 1)) rudius = int(random.randrange(1000)) qp.drawArc(0, 0, rudius, rudius, 0 * 16, 360 * 16) self.flag = False
def paintEvent(self, event): super().paintEvent(event) size = self.size() percentRange = float(self.value - self.minValue) / float(self.maxValue - self.minValue) endAngle = self.startAngle + round( percentRange * float(self.endAngle - self.startAngle), 0) # Now convert angles to 1/16 scale startAngle = int(round(self.startAngle * self.degScaler, 0)) endAngle = int(round(endAngle * self.degScaler, 0)) rect = QtCore.QRect(self.halfPenWidth, self.halfPenWidth, size.width() - self.penWidth, size.height() - self.penWidth) # Set up the painting canvass painter = QPainter() painter.begin(self) painter.setRenderHint(QPainter.Antialiasing) if self.showValue: painter.setFont(self.textfont) painter.setPen(QPen(QColor(self.fontColor))) if self.isFloat: printText = "%.2f" % self.value else: printText = str(int(self.value)) painter.drawText( size.width() / 2 - self.metrics.width(printText) / 2, size.height() / 2, printText) painter.save() painter.translate(self.width(), 0) painter.rotate(90.0) # First draw complete circle painter.setPen(QPen(QColor(self.backgroundColor), self.penWidth)) painter.drawArc(rect, startAngle, self.endAngle * self.degScaler) # First draw complete circle painter.setPen(QPen(QColor(self.barColor), self.penWidth)) painter.drawArc(rect, startAngle, -endAngle) painter.setPen(QPen(QColor('darkgray'), 2)) painter.drawEllipse(1, 1, rect.width() + self.penWidth - 2, rect.width() + self.penWidth - 2) painter.drawEllipse(1 + self.penWidth, 1 + self.penWidth, rect.width() - self.penWidth - 2, rect.width() - self.penWidth - 2) painter.restore() painter.end()
def paint(self, QPainter, QStyleOptionGraphicsItem, QWidget_widget=None): # setPen pen = QPen() pen.setWidth(1) pen.setJoinStyle(Qt.MiterJoin) #让箭头变尖 QPainter.setPen(pen) # draw line QPainter.drawLine(self.line) ptextx = (self.line.x1() + self.line.x2()) / 2 ptexty = (self.line.y1() + self.line.y2()) / 2 ptexty -= 5 ptextx -= len(self.boxName) * 3 QPainter.drawText(QPointF(ptextx, ptexty), self.boxName) #Painter.drawText(QPointF(ptextx, ptexty+20), self.direction) # setBrush brush = QBrush() brush.setColor(Qt.black) brush.setStyle(Qt.SolidPattern) QPainter.setBrush(brush) v = self.line.unitVector() v.setLength(5) v.translate(QPointF(self.line.dx(), self.line.dy())) n = v.normalVector() n.setLength(n.length() * 0.5) n2 = n.normalVector().normalVector() p1 = v.p2() p2 = n.p2() p3 = n2.p2() # 方法1 QPainter.drawLine(self.line) QPainter.drawPolygon(p1, p2, p3) QPainter.drawArc(10, 10, 50, 50, 0, 180 * 16) v = self.line.unitVector() v.setLength(5) v.translate(QPointF(10, 60)) n = v.normalVector() n.setLength(n.length() * 0.5) n2 = n.normalVector().normalVector() p1 = v.p2() p2 = n.p2() p3 = n2.p2() # 方法1 #QPainter.drawLine(self.line) QPainter.drawPolygon(p1, p2, p3) self.scene.update()
def paint(self, QPainter, QStyleOptionGraphicsItem, QWidget_widget=None): # setPen pen = QPen() pen.setWidth(1) pen.setJoinStyle(Qt.MiterJoin) #让箭头变尖 QPainter.setPen(pen) # draw line QPainter.drawLine(self.line) ptextx = (self.line.x1() + self.line.x2()) / 2 ptexty = (self.line.y1() + self.line.y2()) / 2 ptexty -= 5 ptextx -= len(self.boxName) * 3 #QPainter.drawText(QPointF(ptextx, ptexty+20), self.direction) # setBrush brush = QBrush() brush.setColor(Qt.black) brush.setStyle(Qt.SolidPattern) QPainter.setBrush(brush) v = self.line.unitVector() v.setLength(5) v.translate(QPointF(self.line.dx(), self.line.dy())) n = v.normalVector() n.setLength(n.length() * 0.5) n2 = n.normalVector().normalVector() p1 = v.p2() p2 = n.p2() p3 = n2.p2() # 方法1 QPainter.drawLine(self.line) QPainter.drawPolygon(p1, p2, p3) if self.fromLocation is not None and self.toLocation is not None: if self.fromLocation.boxName == self.toLocation.boxName: QPainter.drawArc(self.arcx1, self.arcy1, 80, 80, self.minAngle * 16, self.spanAngle * 16) ptextx = self.arcTextx ptexty = self.arcTexty #QPainter.drawArc(self.arcx1, self.arcy1+100, 50, 50, 270*16, 89*16) #QPainter.drawArc(self.arcx1, self.arcy1+200, 50, 50, 0*16, 89*16) #QPainter.drawArc(self.arcx1, self.arcy1+300, 50, 50, 270*16, 180*16) #QPainter.drawArc(self.arcx1, self.arcy1+400, 50, 50, 270*16, 270*16) #QPainter.drawArc(self.arcx1, self.arcy1+500, 50, 50, 180*16, 89*16) QPainter.drawText(QPointF(ptextx, ptexty), self.boxName) #QPainter.drawRect(self.arcx1, self.arcy1, 50, 50) self.scene.update()
def draw_arc(painter: QtGui.QPainter, x: int, y: int) -> None: angle: int = 90 * 16 if y > 0: angle = 270 * 16 width: float = -2 * x height: float = -2 * y span_angle: int = 90 * 16 painter.drawArc(x, y, width, height, angle, span_angle)
def paintEvent(self, event): width = self.pos2[0] - self.pos1[0] height = self.pos2[1] - self.pos1[1] qp = QPainter() qp.begin(self) rect = QtCore.QRect(self.pos1[0], self.pos1[1], width, height) startAngle = 0 arcLength = 360 * 16 qp.drawArc(rect, startAngle, arcLength) qp.end()
class GameWidget(QWidget): def __init__(self): super().__init__() self.cur_width = int(DESK_WIDTH / 2) self.cur_height = int(2 * DESK_HEIGHT / 3) self.init_ui() self.paint_handle = [] self.timer = Timer(TICK_INTERVAL, self.do_repaint) self.timer.start() def init_ui(self): self.setGeometry(0, 0, self.cur_width, self.cur_height) self.setWindowTitle("VeryCoolBall") self.show() def paintEvent(self, e): self.qp = QPainter() self.qp.begin(self) for func in self.paint_handle: func() self.qp.end() def do_repaint(self): self.update() self.timer = Timer(TICK_INTERVAL, self.do_repaint) self.timer.start() def append_paint_handle(self, func): self.paint_handle.append(func) def draw_point(self, pos, color=Qt.black): self.qp.setPen(color) self.qp.drawPoint(pos[0], pos[1]) return True def draw_line(self, start_pos, end_pos, color=Qt.black): self.qp.setPen(color) self.qp.drawLine(start_pos[0], start_pos[1], end_pos[0], end_pos[1]) return True def draw_box(self, left_up_pos, right_down_pos, color=Qt.black): self.qp.setPen(color) right_up_pos = right_down_pos[0], left_up_pos[1] left_down_pos = left_up_pos[0], right_down_pos[1] self.draw_line(left_up_pos, right_up_pos) self.draw_line(right_up_pos, right_down_pos) self.draw_line(right_down_pos, left_down_pos) self.draw_line(left_down_pos, left_up_pos) return True def draw_sphere(self, pos, radius, color=Qt.black): self.qp.setPen(color) # QT绘制单位就是1/16度,你必须单位换算 self.qp.drawArc(pos[0], pos[-1], radius, radius, 0, 360 * 16)
def paintEvent(self, event): width = self.pos2[0] - self.pos1[0] height = self.pos2[1] - self.pos1[1] rect = QRect(self.pos1[0],self.pos1[1],width,height) qp = QPainter() qp.begin(self) pen = QPen(Qt.red,3) pen.setStyle(Qt.DotLine) qp.setPen(pen) qp.drawArc(rect,0,360*16) qp.end()
def paintEvent(self, event): ancho = self.posicion_2[0] - self.posicion_1[0] alto = self.posicion_2[1] - self.posicion_1[1] painter = QPainter() painter.begin(self) rectangulo = QRect(self.posicion_1[0], self.posicion_1[1], ancho, alto) painter.drawArc(rectangulo, 0, 360 * 16) painter.end()
def draw_arc(self, painter: QtGui.QPainter) -> None: angle = 90 * 16 if self.points["TY1"].y() > 0: angle = 270 * 16 x = self.points["TY3"].x() y = self.points["TY1"].y() width = -2 * x height = -2 * y span_angle = 90 * 16 painter.drawArc(x, y, width, height, angle, span_angle)
def paintEvent(self, a0: QtGui.QPaintEvent) -> None: painter = QPainter() painter.begin(self) painter.setPen(Qt.blue) painter.drawArc(QRect(0, 10, 100, 100), 0, 90 * 16) image = QImage('./image/book.jpg') rect = QRect(10, 140, image.width() / 2, image.height() / 2) painter.drawImage(rect, image) painter.end()
def paintEvent(self,event): #paintEvent 当窗口变化是直接调用,不需要调用函数 painter=QPainter() painter.begin(self) #设置画笔和字体 painter.setPen(QColor(2,1,3)) painter.setFont(QFont('SimSun',12)) '''绘制圆弧''' #(1)确定绘制区域 rect=QRect(0,0,100,100) #前两个值为左上角的坐标,后两个值为宽度和高度 #(2)在区域绘制图形 painter.drawArc(rect,0,50*16) #后面两个参数为为起始的角度,和结束的角度,为什么乘16,因为单位为alen,一度=16alen,也就是50度为50*16 '''绘制圆''' rect=QRect(100,0,50,50) painter.setPen(Qt.red) painter.drawArc(rect,0,360*16) '''绘制带弦的弧''' rect = QRect(200, 0, 50, 50) painter.drawChord(rect,1,90*16) '''绘制扇形''' rect = QRect(0,50, 50, 50) painter.drawPie(rect,12,76*16) '''绘制椭圆''' painter.drawEllipse(0,100,60,50) #前两个参数为起始坐标,后两个为宽和高,当后两个参数一样为圆 '''绘制多边形''' #绘制一个正方形 p1=QPoint(100,100) p2=QPoint(130,100) p3=QPoint(130,130) p4=QPoint(100,130) polygon=QPolygon([p1,p2,p3,p4]) painter.drawPolygon(polygon) '''绘制一个图形''' #(1)读取图像 img=QImage('python.png') #(2)进行绘制,对图片的大小压说为原来的二分之一 rect=QRect(100,100,img.width()/3,img.height()/3) painter.drawImage(rect,img) painter.end()
def paintEvent(self, QPaintEvent): p = QPainter(self) p.setPen(self.pen) p.setBrush(self.brush) rect = QRect(50, 100, 300, 200) points = [ QPoint(150, 100), QPoint(300, 150), QPoint(350, 250), QPoint(100, 300) ] startAngle = 30 * 16 spanAngle = 120 * 16 path = QPainterPath() path.addRect(150, 150, 100, 100) path.moveTo(100, 100) path.cubicTo(300, 100, 200, 200, 300, 300) path.cubicTo(100, 300, 200, 200, 100, 100) if self.shape == "Line": p.drawLine(rect.topLeft(), rect.bottomRight()) elif self.shape == "Rectangle": p.drawRect(rect) elif self.shape == 'Rounded Rectangle': p.drawRoundedRect(rect, 25, 25, Qt.RelativeSize) elif self.shape == "Ellipse": p.drawEllipse(rect) elif self.shape == "Polygon": p.drawPolygon(QPolygon(points), Qt.WindingFill) elif self.shape == "Polyline": p.drawPolyline(QPolygon(points)) elif self.shape == "Points": p.drawPoints(QPolygon(points)) elif self.shape == "Pie": p.drawPie(rect, startAngle, spanAngle) elif self.shape == "Arc": p.drawArc(rect, startAngle, spanAngle) elif self.shape == "Chord": p.drawChord(rect, startAngle, spanAngle) elif self.shape == "Path": p.drawPath(path) elif self.shape == "Text": p.drawText(rect, Qt.AlignCenter, "Hello Qt!") elif self.shape == "Pixmap": p.drawPixmap(150, 150, QPixmap("images/qt-logo.png"))
def paintEvent(self, event): qp = QPainter() qp.begin(self) if self.toDraw == "rectangle": width = self.pos2[0] - self.pos1[0] height = self.pos2[1] - self.pos1[1] qp.drawRect(self.pos1[0], self.pos1[1], width, height) if self.toDraw == "circle": width = self.pos2[0] - self.pos1[0] height = self.pos2[1] - self.pos1[1] rect = QtCore.QRect(self.pos1[0], self.pos1[1], width, height) startAngle = 0 arcLength = 360 * 16 qp.drawArc(rect, startAngle, arcLength) qp.end() if self.toDraw == "line": qp.drawLine(self.pos1[0], self.pos1[1], self.pos2[0], self.pos2[1])
def paintEvent(self, event): painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing) pen = QPen() pen.setWidth(9) pen.setColor(QColor("#191a2f")) painter.setPen(pen) painter.drawArc(5.1, 5.1, self.width() - 10, self.height() - 10, 1450, -5650) pen = QPen() pen.setWidth(10) pen.setColor(QColor("#00ffc1")) painter.setPen(pen) painter.drawArc(5.1, 5.1, self.width() - 10, self.height() - 10, 1450, self.values) self.update()
def paintEvent(self, event): pp = QPainter(self.pix) # pp.setPen(Qt.red) pp.setPen(QPen(Qt.red, 20)) pp.drawArc(0, 0, 100, 100, 0, 45 * 16) # 根据鼠标指针前后两个位置绘制直线 pp.drawPoints(self.lastPoint, self.endPoint) # pp.drawArc(0, 0, self.lastPoint, self.endPoint, 0, 360 * 16) # pp.drawLine(self.lastPoint, self.endPoint) # 让前一个坐标值等于后一个坐标值, # 这样就能实现画出连续的线 self.lastPoint = self.endPoint painter = QPainter(self) painter.drawPixmap(0, 0, self.pix) self.label_29.setPixmap(self.pix)
def draw( startPoint: QPoint, endPoint: QPoint, painter: QPainter, settings: LineSettings = LineSettings() ) -> QPainterPath: # hardcoded sine wave half_width = (startPoint.x() - endPoint.x()) / 2. half_height = (startPoint.y() - endPoint.y()) / 2. half_point_x = endPoint.x() - half_width half_point_y = endPoint.y() - half_height painter.drawArc( QRect(startPoint.x(), startPoint.y(), half_width, half_height), -half_height, half_width) painter.drawArc( QRect(half_point_x, half_point_y, half_width, half_height), half_height, half_width)
def paintEvent(self, event): painter = QPainter(self) event.accept() painter.save() painter.setRenderHint(QPainter.Antialiasing, True) if self.fLabel: if self.fCustomPaintMode == self.CUSTOM_PAINT_MODE_NULL: painter.setPen(self.fLabelGradientColor2) painter.setBrush(self.fLabelGradient) painter.drawRect(self.fLabelGradientRect) painter.setFont(self.fLabelFont) painter.setPen(self.fLabelGradientColorT[0 if self.isEnabled() else 1]) painter.drawText(self.fLabelPos, self.fLabel) if self.isEnabled(): normValue = float(self.fRealValue - self.fMinimum) / float(self.fMaximum - self.fMinimum) target = QRectF(0.0, 0.0, self.fPixmapBaseSize, self.fPixmapBaseSize) curLayer = int((self.fPixmapLayersCount - 1) * normValue) if self.fPixmapOrientation == self.HORIZONTAL: xpos = self.fPixmapBaseSize * curLayer ypos = 0.0 else: xpos = 0.0 ypos = self.fPixmapBaseSize * curLayer source = QRectF(xpos, ypos, self.fPixmapBaseSize, self.fPixmapBaseSize) painter.drawPixmap(target, self.fPixmap, source) # Custom knobs (Dry/Wet and Volume) if self.fCustomPaintMode in (self.CUSTOM_PAINT_MODE_CARLA_WET, self.CUSTOM_PAINT_MODE_CARLA_VOL): # knob color colorGreen = QColor(0x5D, 0xE7, 0x3D).lighter(100 + self.fHoverStep*6) colorBlue = QColor(0x3E, 0xB8, 0xBE).lighter(100 + self.fHoverStep*6) # draw small circle ballRect = QRectF(8.0, 8.0, 15.0, 15.0) ballPath = QPainterPath() ballPath.addEllipse(ballRect) #painter.drawRect(ballRect) tmpValue = (0.375 + 0.75*normValue) ballValue = tmpValue - floor(tmpValue) ballPoint = ballPath.pointAtPercent(ballValue) # draw arc startAngle = 216*16 spanAngle = -252*16*normValue if self.fCustomPaintMode == self.CUSTOM_PAINT_MODE_CARLA_WET: painter.setBrush(colorBlue) painter.setPen(QPen(colorBlue, 0)) painter.drawEllipse(QRectF(ballPoint.x(), ballPoint.y(), 2.2, 2.2)) gradient = QConicalGradient(15.5, 15.5, -45) gradient.setColorAt(0.0, colorBlue) gradient.setColorAt(0.125, colorBlue) gradient.setColorAt(0.625, colorGreen) gradient.setColorAt(0.75, colorGreen) gradient.setColorAt(0.76, colorGreen) gradient.setColorAt(1.0, colorGreen) painter.setBrush(gradient) painter.setPen(QPen(gradient, 3)) else: painter.setBrush(colorBlue) painter.setPen(QPen(colorBlue, 0)) painter.drawEllipse(QRectF(ballPoint.x(), ballPoint.y(), 2.2, 2.2)) painter.setBrush(colorBlue) painter.setPen(QPen(colorBlue, 3)) painter.drawArc(4.0, 4.0, 26.0, 26.0, startAngle, spanAngle) # Custom knobs (L and R) elif self.fCustomPaintMode in (self.CUSTOM_PAINT_MODE_CARLA_L, self.CUSTOM_PAINT_MODE_CARLA_R): # knob color color = QColor(0xAD, 0xD5, 0x48).lighter(100 + self.fHoverStep*6) # draw small circle ballRect = QRectF(7.0, 8.0, 11.0, 12.0) ballPath = QPainterPath() ballPath.addEllipse(ballRect) #painter.drawRect(ballRect) tmpValue = (0.375 + 0.75*normValue) ballValue = tmpValue - floor(tmpValue) ballPoint = ballPath.pointAtPercent(ballValue) painter.setBrush(color) painter.setPen(QPen(color, 0)) painter.drawEllipse(QRectF(ballPoint.x(), ballPoint.y(), 2.0, 2.0)) # draw arc if self.fCustomPaintMode == self.CUSTOM_PAINT_MODE_CARLA_L: startAngle = 216*16 spanAngle = -252.0*16*normValue else: startAngle = 324.0*16 spanAngle = 252.0*16*(1.0-normValue) painter.setPen(QPen(color, 2)) painter.drawArc(3.5, 4.5, 22.0, 22.0, startAngle, spanAngle) # Custom knobs (Color) elif self.fCustomPaintMode == self.CUSTOM_PAINT_MODE_COLOR: # knob color color = self.fCustomPaintColor.lighter(100 + self.fHoverStep*6) # draw small circle ballRect = QRectF(8.0, 8.0, 15.0, 15.0) ballPath = QPainterPath() ballPath.addEllipse(ballRect) tmpValue = (0.375 + 0.75*normValue) ballValue = tmpValue - floor(tmpValue) ballPoint = ballPath.pointAtPercent(ballValue) # draw arc startAngle = 216*16 spanAngle = -252*16*normValue painter.setBrush(color) painter.setPen(QPen(color, 0)) painter.drawEllipse(QRectF(ballPoint.x(), ballPoint.y(), 2.2, 2.2)) painter.setBrush(color) painter.setPen(QPen(color, 3)) painter.drawArc(4.0, 4.0, 26.0, 26.0, startAngle, spanAngle) # Custom knobs (Zita) elif self.fCustomPaintMode == self.CUSTOM_PAINT_MODE_ZITA: a = normValue * pi * 1.5 - 2.35 r = 10.0 x = 10.5 y = 10.5 x += r * sin(a) y -= r * cos(a) painter.setBrush(Qt.black) painter.setPen(QPen(Qt.black, 2)) painter.drawLine(QPointF(11.0, 11.0), QPointF(x, y)) # Custom knobs else: painter.restore() return if self.HOVER_MIN < self.fHoverStep < self.HOVER_MAX: self.fHoverStep += 1 if self.fIsHovered else -1 QTimer.singleShot(20, self.update) else: # isEnabled() target = QRectF(0.0, 0.0, self.fPixmapBaseSize, self.fPixmapBaseSize) painter.drawPixmap(target, self.fPixmap, target) painter.restore()
def paint(self, painter: QPainter, styleOptionGraphicsItem: QStyleOptionGraphicsItem, widget: QWidget=None): painter.setPen(self._pen) painter.setBrush(QBrush()) painter.drawArc(self.rect(), self.startAngle(), self.spanAngle())
def paintEvent(self, _event): painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing) width = self.width() height = self.height() if self.dynamic_resize: knob_radius = self.dynamic_knob_radius else: knob_radius = self.knob_radius # ensure that the center point is in the middle of a pixel to ensure # that exact vertial and horizantal ticks are drawn exactly 1px wide x = math.floor(width / 2.0) + 0.5 y = math.floor(height / 2.0) + 0.5 if DEBUG: painter.fillRect(0, 0, width, height, Qt.yellow) painter.translate(x, y) if self.knob_style == KnobWidget.STYLE_NEEDLE: r = min(x, y) - 1 painter.setPen(Qt.white) painter.setBrush(Qt.white) painter.drawEllipse(QPoint(0, 0), r, r) angle = self.value_factor * self.total_angle - (self.total_angle / 2.0) # draw base knob or needle spike if self.knob_style == KnobWidget.STYLE_ROUND: painter.setPen(self.border_color) if self.pressed: gradient = QRadialGradient(0, 0, knob_radius) gradient.setColorAt(0, self.base_color_pressed) gradient.setColorAt(0.85, self.base_color) gradient.setColorAt(1, self.base_color) painter.setBrush(gradient) else: painter.setBrush(self.base_color) painter.drawEllipse(QPoint(0, 0), knob_radius, knob_radius) elif self.knob_style == KnobWidget.STYLE_NEEDLE: painter.save() painter.rotate(angle) painter.setPen(self.needle_color) painter.setBrush(self.needle_color) needle = QPolygonF() needle.append(QPointF(self.needle_base_radius * 0.6, 0)) needle.append(QPointF(0, -knob_radius)) needle.append(QPointF(-self.needle_base_radius * 0.6, 0)) painter.drawPolygon(needle) painter.restore() # draw knob mark or needle base if self.knob_style == KnobWidget.STYLE_ROUND: painter.save() painter.rotate(angle) painter.setPen(QPen(self.mark_color, 2)) painter.drawLine(0, -knob_radius * 0.4, 0, -knob_radius * 0.8) painter.restore() elif self.knob_style == KnobWidget.STYLE_NEEDLE: painter.setPen(self.border_color) painter.setBrush(self.base_color) painter.drawEllipse(QPoint(0, 0), self.needle_base_radius, self.needle_base_radius) if self.scale_visible: painter.setPen(Qt.black) # draw scale arc if self.scale_arc_visible: painter.drawArc(-knob_radius - self.knob_to_scale, -knob_radius - self.knob_to_scale, knob_radius * 2 + self.knob_to_scale * 2, knob_radius * 2 + self.knob_to_scale * 2, (90 + self.total_angle / 2) * 16, -self.total_angle * 16) # draw scale ticks def value_to_angle(value): return (float(value - self.minimum_value) / self.value_range) * self.total_angle - (self.total_angle / 2.0) value = self.minimum_value while value <= self.maximum_value: angle = value_to_angle(value) painter.save() painter.rotate(value_to_angle(value)) painter.drawLine(0, -knob_radius - self.knob_to_scale, 0, -knob_radius - self.knob_to_scale - self.tick_size_large) if self.scale_text_visible: p = painter.worldTransform().map(QPoint(0, -knob_radius - \ self.knob_to_scale - \ self.tick_size_large - \ self.tick_to_text - \ self.text_radius)) painter.restore() if self.scale_text_visible: if DEBUG: painter.save() painter.setPen(QColor(255, 0, 0, 50)) painter.setBrush(QColor(255, 0, 0, 50)) painter.drawEllipse(QPoint(p.x() - x, p.y() - y), self.text_radius, self.text_radius) painter.restore() painter.drawText(p.x() - x - 30, p.y() - y - 30, 60, 60, Qt.TextDontClip | Qt.AlignHCenter | Qt.AlignVCenter, str(value)) for i in range(1, self.scale_step_divisions): sub_value = value + (float(self.scale_step_size) * i) / self.scale_step_divisions if sub_value > self.maximum_value: break painter.save() painter.rotate(value_to_angle(sub_value)) painter.drawLine(0, -knob_radius - self.knob_to_scale, 0, -knob_radius - self.knob_to_scale - self.tick_size_small) painter.restore() value += self.scale_step_size if self.title_text != None: painter.drawText(-knob_radius, knob_radius - 30, knob_radius * 2, 60, Qt.TextDontClip | Qt.AlignHCenter | Qt.AlignVCenter, self.title_text)