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 paintEvent(self, paintEvent): # return painter = QPainter(self) painter.setPen(QPen(Qt.NoPen)) # painter.setBrush(QBrush(Qt.lightGray)) # painter.drawRect(0,0,self.width(), self.height()) if self.state == self.STATE_PASSIVE: painter.setBrush(QBrush(QColor(0, 200, 255, 30))) elif self.state == self.STATE_ACTIVE: painter.setBrush(QBrush(QColor(0, 200, 255, 100))) elif self.state == self.STATE_CURRENT: painter.setBrush(QBrush(QColor(0, 200, 255, 255))) top = self.height() / 2 - self.visualSize / 2 left = self.x - self.visualSize / 2 painter.drawPie(left, top, self.visualSize, self.visualSize, 0, 5760 * (16 * 360)) painter.setPen(QPen(QColor(0, 0, 0))) painter.drawText(QRectF(left, top, self.visualSize, self.visualSize), Qt.AlignCenter, self.primaryText) painter.drawText( QRectF(left - self.visualSize, top + self.visualSize, self.visualSize * 3, self.visualSize / 2), Qt.AlignCenter, self.secondaryText)
def paintEvent(self, evt): painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing, True) # 画边框 painter.setPen(Qt.white) painter.drawRect(self.rect()) realSize = min(self.width(), self.height()) - 10 painter.translate(self.width() / 2.0, self.height() / 2.0) painter.scale(realSize / 1000.0, realSize / 1000.0) painter.rotate(self.rotateAngle) # 画外圈 painter.setPen(Qt.NoPen) painter.setBrush(QColor(80, 80, 80)) painter.drawEllipse(QPointF(0, 0), 500, 500) # 园内部四个扇形区域,蓝白交叉 startAngle = 0 spanAngle = 90 * 16 pieRect = QRectF(QPointF(-400, -400), QPointF(400, 400)) for i in range(4): color = QColor(0, 120, 200) if i % 2 else QColor(240, 240, 240) painter.setBrush(color) painter.drawPie(pieRect, startAngle, spanAngle) startAngle += spanAngle
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 draw(self, painter: QPainter): delta_x = (int)(cos(self.angle) * BOT_POINTER_LENGTH) delta_y = (int)(sin(self.angle) * BOT_POINTER_LENGTH) if self.id == 0: color = QColor(0xFF, 0x00, 0x00, 0xFF) else: color = QColor(0x00, 0x00, 0xFF, 0xFF) pen = QPen(color) brush = QBrush(Qt.SolidPattern) brush.setColor(color) painter.setPen(pen) painter.setBrush(brush) painter.drawPie( SCALE(self.x - BOT_RADIUS), SCALE(self.y - BOT_RADIUS), SCALE(2 * BOT_RADIUS), SCALE(2 * BOT_RADIUS), 0, 360 * 64, ) pen.setWidth(1) painter.drawLine( SCALE(self.x), SCALE(self.y), SCALE(self.x + delta_x), SCALE(self.y + delta_y), )
def paintEvent(self, event): bgcolor = self.palette().color(QPalette.Background) pen = QPen(bgcolor, 7, Qt.SolidLine) qp = QPainter() qp.begin(self) qp.setPen(pen) qp.setRenderHint(QPainter.Antialiasing) qp.setBrush(Qt.gray) for i in range(self.n): alpha = int(16* 360 * i/self.n) alpha2 = int(16* 360 * 1/self.n) qp.setBrush(Qt.green if i<self.m else Qt.gray) qp.drawPie(self.R, alpha, alpha2) qp.end()
def paintEvent(self, event): bgcolor = self.palette().color(QPalette.Background) pen = QPen(bgcolor, 7, Qt.SolidLine) qp = QPainter() qp.begin(self) qp.setPen(pen) qp.setRenderHint(QPainter.Antialiasing) qp.setBrush(Qt.gray) for i in range(self.n): alpha = int(16 * 360 * i / self.n) alpha2 = int(16 * 360 * 1 / self.n) qp.setBrush(Qt.green if i < self.m else Qt.gray) qp.drawPie(self.R, alpha, alpha2) qp.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, QPaintEvent): painter = QPainter() painter.begin(self) # 绘制弧 painter.setPen(Qt.red) rect = QRect(0, 0, 100, 100) # 初始化一块矩形区域,前面两个是矩形所在的左上角坐标点,后面两个是矩形的长和宽 # 绘图使用的单位是alen:1个alen等于1/16度 painter.drawArc(rect, 0, 66 * 16) # rect是弧形所在的区域,0是弧形的起始角度,60*16是弧形的终止角度 # 使用绘制弧形函数来绘制圆 painter.setPen(Qt.blue) painter.drawArc(200,0, 100,100, 0, 360 * 16) # rect是弧形所在的区域,0是弧形的起始角度,60*16是弧形的终止角度 # 绘制带弦的弧 painter.setPen(Qt.yellow) painter.drawChord(300, 0, 100, 100, 0, 145 * 16) # 绘制扇形 painter.setPen(Qt.cyan) painter.drawPie(0, 100, 100, 100, 0, 200 * 16) # 绘制椭圆 painter.setPen(Qt.red) painter.drawEllipse(100, 100, 100, 150) # 绘制多边形:几变形就要指定几个点 p1 = QPoint(10, 200) #点的坐标 p2 = QPoint(30, 200) #点的坐标 p3 = QPoint(200, 300) #点的坐标 p4 = QPoint(300, 300) #点的坐标 p5 = QPoint(100, 400) #点的坐标 po = QPolygon([p1, p2, p3, p4, p5]) painter.drawPolygon(po) # 绘制图像 image = QImage("./24.jpg") # 加载图像 rect1 = QRect(300, 300, image.width()/3, image.height()/3) painter.drawImage(rect1, image) painter.end()
def paintEvent(self, event): bgcolor = self.palette().color(QPalette.Background) pen = QPen(Qt.gray, 1, Qt.SolidLine) qp = QPainter() qp.begin(self) qp.setPen(pen) qp.setRenderHint(QPainter.Antialiasing) qp.setBrush(Qt.gray) total = sum([x[2] for x in self._list]) if total == 0: return alpha = 0 s = 0 for name, color, amount in self._list: delta = int(16 * 360 * amount / total) qp.setBrush(color) qp.drawPie(self.R, alpha, delta) alpha += delta qp.end()
def drawDiagram(self, qp: QPainter): """Предназначена для рисования на frame""" start = self.dteStart.dateTime().toPyDateTime() end = self.dteEnd.dateTime().toPyDateTime() all_time, flag_time = self.getStatistic(start, end) center = self.frame.width() // 2, self.frame.height() // 2 r = min(self.frame.width() // 2, self.frame.height() // 2) - 1 rect = QRect(center[0] - r, center[1] - r, 2 * r, 2 * r) if all_time == 0: qp.drawEllipse(rect) else: now_angle = 0 for flag_id, time in flag_time.items(): color = self.getColor(flag_id) d_angel = int(16 * 360 * time / all_time) qp.setBrush(color) qp.drawPie(rect, now_angle, d_angel) now_angle += d_angel
def paintEvent(self, e): if self.v == 100: return p = QPainter(self) brush = QBrush(QColor(self.c[0], self.c[1], self.c[1], 127)) p.setBrush(brush) pen = QPen() pen.setStyle(Qt.NoPen) p.setPen(pen) start = 16 * 90 - 16 * 360 * (self.v / 100) span = -16 * 360 * (1 - (self.v / 100)) # start = 90*16 - 120*16 # span = -(360-120)*16 size = p.device().width() rect = QRectF(0, 0, size, size) # print(str(self.v)+str(self.val[1])+str(span)) p.drawPie(rect, start, span)
def paintEvent(self, event): painter = QPainter(self) super().paintEvent(event) painter.setRenderHint(QPainter.Antialiasing) brush = None if not self.parent().isEnabled(): brush = QBrush(QColor(Qt.lightGray)) elif self.active: brush = QBrush(QColor(Qt.red)) elif self.marked: brush = QBrush(QColor(Qt.green)) else: brush = QBrush(QColor(Qt.white)) pen = QPen(Qt.black) pen.setWidth(5) painter.setBrush(brush) painter.setPen(pen) painter.drawPie(self.offset, self.offset, self.width() - self.offset * 2, self.height() - self.offset * 2, self.start, 45 * 16) painter.end()
class testWidget(QWidget): def __init__(self): self.needDraw = True super().__init__() self.setMinimumSize(self.width(), self.height()) def paintEvent(self, e): self.qp.begin(self) self.drawWidget() self.qp.end() def testDraw(self, num: int = 0): self.qp = QPainter() font = QFont('Serif', 7, QFont.Light) self.qp.setFont(font) pen = QPen(QColor(20, 20, 20), 1, Qt.SolidLine) self.qp.setPen(pen) self.qp.setBrush(Qt.NoBrush) self.qp.begin(self) self.qp.drawPie(0, 0, 100, 100, 1, num) self.qp.end() def drawWidget(self): # pen2 = QPen(QColor(250, 20, 20), 1, # Qt.SolidLine) # # pen3 = QPen(QColor(20, 20, 250), 2, # Qt.SolidLine) # # pen4 = QPen(QColor(20, 20, 250), 1, # Qt.SolidLine) w = self.width() h = self.height() rect = QRectF(0.0, 0.0, 120.0, 50.0)
def draw(self, painter: QPainter): painter.setRenderHint(QPainter.Antialiasing) if self.color == 0: color = QColor(0xFF, 0x07, 0x3A, 0xFF) elif self.color == 1: color = QColor(0x4D, 0x4D, 0xFF, 0xFF) else: color = QColor(0xDD, 0xD9, 0x2A, 0xFF) pen = QPen(color) brush = QBrush(Qt.SolidPattern) brush.setColor(color) painter.setPen(pen) painter.setBrush(brush) tl = QPointF(SCALE(self.x - 1), SCALE(self.y - 1)) br = QPointF(SCALE(self.x + 1), SCALE(self.y + 1)) body = QRectF(tl, br) painter.drawPie(body, 0, 360 * 64)
def paintEvent(self, event): self.main_width = self.width() self.main_height = self.height() painter = QPainter() painter.begin(self) painter.setPen(QPen(Qt.black, 1)) painter.setBrush(QBrush(self.colorIcon, Qt.SolidPattern)) # Painting start if self.doPaint: if self.doBar: max_val = self.mHisto.max() segment = int(self.main_width / len(self.mHisto.m_list)) rescale = self.main_height / max_val x = 0 for rect in self.mHisto.m_list: height = rect.m_amount * rescale y = self.main_height - height painter.drawRect(int(x), int(y), int(segment), int(height)) x += segment elif self.doPie: angle_scale = 360 / self.mHisto.total() start_angle = 0 segment = QRect(0, 0, 400, 400) for rect in self.mHisto.m_list: painter.setBrush( QColor(qrand() % 256, qrand() % 256, qrand() % 256)) centre = QPoint(int(self.width() / 2), int(self.width() / 2)) segment.moveCenter(centre) span_angle = (rect.m_amount * angle_scale) * 16 painter.drawPie(segment, int(start_angle), int(span_angle)) start_angle += span_angle # Painting end painter.end()
def paintEvent(self, event): painter = QPainter() painter.begin(self) painter.setPen(Qt.blue) #绘制弧 rect = QRect(0, 10, 100, 100) # alen: 1个alen等于1/16度 45 * 16 painter.drawArc(rect, 0, 90 * 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(290, 512) point4 = QPoint(290, 588) point5 = QPoint(200, 533) polygon = QPolygon([point1, point2, point3, point4, point5]) painter.drawPolygon(polygon) # 绘制图像 image = QImage('src\images\QQ截图20200219191139.jpg') rect = QRect(10, 400, image.width() / 3, image.height() / 3) painter.drawImage(rect, image) painter.end()
def paintEvent(self, event): painter = QPainter() painter.begin(self) painter.setRenderHint(QPainter.Antialiasing) painter.setPen(Qt.NoPen) painter.setBrush(QBrush(QColor("#888888"))) path1 = QPainterPath() path1.moveTo(5, 5) path1.cubicTo(40, 5, 50, 50, 99, 99) path1.cubicTo(5, 99, 50, 50, 5, 5) painter.drawPath(path1) painter.drawPie(130, 20, 90, 60, 30 * 16, 120 * 16) painter.drawChord(240, 30, 90, 60, 0, 16 * 180) painter.drawRoundedRect(20, 120, 80, 50, 10, 10) polygon = QPolygon() polygon.append(QPoint(130, 140)) polygon.append(QPoint(180, 170)) polygon.append(QPoint(180, 140)) polygon.append(QPoint(220, 110)) polygon.append(QPoint(140, 100)) painter.drawPolygon(polygon) painter.drawRect(250, 110, 60, 60) baseline = QPointF(20, 250) font = QFont("Georgia", 55) path2 = QPainterPath() path2.addText(baseline, font, "Q") painter.drawPath(path2) painter.drawEllipse(140, 200, 60, 60) painter.drawEllipse(240, 200, 90, 60)
def paintEvent(self, event): painter = QPainter(self) painter.begin(self) painter.setPen(Qt.blue) painter.setFont(QFont('SimSun', 50)) # 绘制弧形 rect = QRect(0, 10, 800, 800) # 位置和大小 painter.drawArc(rect, 180 * 16, 30 * 16) # rect 区域,0起始位置,50*16表示50度 1度=16a # 绘制带弦的弧 painter.drawChord(rect, 90 * 16, 30 * 16) # 绘制扇形 painter.drawPie(10, 240, 100, 100, 12, 120 * 16) # 绘制椭圆 painter.drawEllipse(50, 50, 50, 100) # 绘制多边形(多边形对象) point1 = QPoint(130, 120) point2 = QPoint(130, 150) point3 = QPoint(220, 180) point4 = QPoint(220, 170) point5 = QPoint(200, 150) # 多边形对象 polygon = QPolygon([point1, point2, point3, point4, point5]) painter.drawPolygon(polygon) # 绘制图片 image = QImage(QPixmap('../images/ajax-loading.gif')) rect = QRect(100, 100, image.width(), image.height()) painter.drawImage(rect, image) painter.end()
def paintEvent(self, event): frstRad = min(self.width(), self.height()) / 2.5 scndRad = frstRad * .75 thrdRad = frstRad * .50 frthRad = frstRad * .25 radInc = frthRad * 0.9 # visualization is centered on the widget visCenterX = int(self.width() / 2) visCenterY = int(self.height() / 2) painter = QPainter() painter.begin(self) painter.setRenderHint(QPainter.Antialiasing) painter.setPen(Qt.white) for i in range(self.numSlices): painter.setBrush(QColor(148, 141, 179)) rad = int(frstRad + (radInc * self.radiiCoeffs[(0*self.numSlices) + i+1])) frame = QRect(visCenterX - rad, visCenterY - rad, rad*2, rad*2) painter.drawPie(frame, self.slicePoints[i], self.spanAngle) painter.setBrush(QColor(96, 88, 133)) rad = int(scndRad + (radInc * self.radiiCoeffs[(1*self.numSlices) + i+1])) frame = QRect(visCenterX - rad, visCenterY - rad, rad*2, rad*2) painter.drawPie(frame, self.slicePoints[i], self.spanAngle) painter.setBrush(QColor(67, 59, 103)) rad = int(thrdRad + (radInc * self.radiiCoeffs[(2*self.numSlices) + i+1])) frame = QRect(visCenterX - rad, visCenterY - rad, rad*2, rad*2) painter.drawPie(frame, self.slicePoints[i], self.spanAngle) painter.setBrush(QColor(50, 35, 75)) rad = int(frthRad + (radInc * self.radiiCoeffs[(3*self.numSlices) + i+1])) frame = QRect(visCenterX - rad, visCenterY - rad, rad*2, rad*2) painter.drawPie(frame, self.slicePoints[i], self.spanAngle) painter.end()
def paintEvent(self, event): qp = QPainter(self) bounds = self.rect() qp.setBrush(self.unselectedBrush) if self.selectedSlice is 0: qp.setBrush(self.selectedBrush) qp.drawPie(bounds, 0, -120 * 16) qp.setBrush(self.unselectedBrush) if self.selectedSlice is 1: qp.setBrush(self.selectedBrush) qp.drawPie(bounds, -120 * 16, -120 * 16) qp.setBrush(self.unselectedBrush) if self.selectedSlice is 2: qp.setBrush(self.selectedBrush) qp.drawPie(bounds, -2 * 120 * 16, -120 * 16)
def paintEvent(self, event): selections = self.selectionModel() option = self.viewOptions() state = option.state background = option.palette.base() foreground = QPen(option.palette.color(QPalette.WindowText)) textPen = QPen(option.palette.color(QPalette.Text)) highlightedPen = QPen(option.palette.color(QPalette.HighlightedText)) painter = QPainter(self.viewport()) painter.setRenderHint(QPainter.Antialiasing) painter.fillRect(event.rect(), background) painter.setPen(foreground) # Viewport rectangles pieRect = QRect(self.margin, self.margin, self.pieSize, self.pieSize) keyPoint = QPoint(self.totalSize - self.horizontalScrollBar().value(), self.margin - self.verticalScrollBar().value()) if self.validItems > 0: painter.save() painter.translate(pieRect.x() - self.horizontalScrollBar().value(), pieRect.y() - self.verticalScrollBar().value()) painter.drawEllipse(0, 0, self.pieSize, self.pieSize) startAngle = 0.0 for row in range(self.model().rowCount(self.rootIndex())): index = self.model().index(row, 1, self.rootIndex()) value = self.model().data(index) if value > 0.0: angle = 360 * value / self.totalValue colorIndex = self.model().index(row, 0, self.rootIndex()) color = self.model().data(colorIndex, Qt.DecorationRole) if self.currentIndex() == index: painter.setBrush(QBrush(color, Qt.Dense4Pattern)) elif selections.isSelected(index): painter.setBrush(QBrush(color, Qt.Dense3Pattern)) else: painter.setBrush(QBrush(color)) painter.drawPie(0, 0, self.pieSize, self.pieSize, int(startAngle * 16), int(angle * 16)) startAngle += angle painter.restore() keyNumber = 0 for row in range(self.model().rowCount(self.rootIndex())): index = self.model().index(row, 1, self.rootIndex()) value = self.model().data(index) if value > 0.0: labelIndex = self.model().index(row, 0, self.rootIndex()) option = self.viewOptions() option.rect = self.visualRect(labelIndex) if selections.isSelected(labelIndex): option.state |= QStyle.State_Selected if self.currentIndex() == labelIndex: option.state |= QStyle.State_HasFocus self.itemDelegate().paint(painter, option, labelIndex) keyNumber += 1
def paintEvent(self, event): selections = self.selectionModel() option = self.viewOptions() state = option.state background = option.palette.base() foreground = QPen(option.palette.color(QPalette.WindowText)) textPen = QPen(option.palette.color(QPalette.Text)) highlightedPen = QPen(option.palette.color(QPalette.HighlightedText)) painter = QPainter(self.viewport()) painter.setRenderHint(QPainter.Antialiasing) painter.fillRect(event.rect(), background) painter.setPen(foreground) # Viewport rectangles pieRect = QRect(self.margin, self.margin, self.pieSize, self.pieSize) keyPoint = QPoint(self.totalSize - self.horizontalScrollBar().value(), self.margin - self.verticalScrollBar().value()) if self.validItems > 0: painter.save() painter.translate(pieRect.x() - self.horizontalScrollBar().value(), pieRect.y() - self.verticalScrollBar().value()) painter.drawEllipse(0, 0, self.pieSize, self.pieSize) startAngle = 0.0 for row in range(self.model().rowCount(self.rootIndex())): index = self.model().index(row, 1, self.rootIndex()) value = self.model().data(index) if value > 0.0: angle = 360*value/self.totalValue colorIndex = self.model().index(row, 0, self.rootIndex()) color = self.model().data(colorIndex, Qt.DecorationRole) if self.currentIndex() == index: painter.setBrush(QBrush(color, Qt.Dense4Pattern)) elif selections.isSelected(index): painter.setBrush(QBrush(color, Qt.Dense3Pattern)) else: painter.setBrush(QBrush(color)) painter.drawPie(0, 0, self.pieSize, self.pieSize, int(startAngle*16), int(angle*16)) startAngle += angle painter.restore() keyNumber = 0 for row in range(self.model().rowCount(self.rootIndex())): index = self.model().index(row, 1, self.rootIndex()) value = self.model().data(index) if value > 0.0: labelIndex = self.model().index(row, 0, self.rootIndex()) option = self.viewOptions() option.rect = self.visualRect(labelIndex) if selections.isSelected(labelIndex): option.state |= QStyle.State_Selected if self.currentIndex() == labelIndex: option.state |= QStyle.State_HasFocus self.itemDelegate().paint(painter, option, labelIndex) keyNumber += 1