def drawItem(self, item, painter, option): """ Draws the inputed item as a bar graph. :param item | <XChartDatasetItem> painter | <QPainter> option | <QStyleOptionGraphicsItem> """ dataset = item.dataset() painter.save() painter.setRenderHint(painter.Antialiasing) pen = QPen(dataset.color()) pen.setWidth(3) painter.setPen(pen) painter.setBrush(Qt.NoBrush) painter.drawPath(item.path()) if self.showPoints(): palette = QApplication.palette() pen = QPen(palette.color(palette.Base)) pen.setWidth(2) painter.setBrush(dataset.color()) painter.setPen(pen) for point in item.buildData('ellipses', []): painter.drawEllipse(point, self.pointRadius(), self.pointRadius()) painter.restore()
def drawAxis(self, painter, rect, axis): """ Draws the axis for the given painter. :param painter | <QPainter> rect | <QRect> """ if not axis: return # draw the axis lines painter.save() pen = QPen(self.axisColor()) pen.setWidth(3) painter.setPen(pen) # draw the vertical line if axis.orientation() == Qt.Vertical: line = QLineF(rect.right(), rect.top(), rect.right(), rect.bottom()) painter.drawLine(line) painter.setFont(axis.labelFont()) for y, height, label in self._buildData.get('grid_h_labels', []): painter.drawText(0, y - height / 2.0, rect.width() - 3, height, Qt.AlignRight | Qt.AlignVCenter, label) painter.translate(0, rect.center().y()) painter.rotate(-90) painter.setFont(axis.titleFont()) painter.drawText(-rect.height() / 2, 0, rect.height(), rect.width(), Qt.AlignHCenter | Qt.AlignTop, axis.title()) # draw the horizontal line else: line = QLineF(rect.left(), rect.top(), rect.right(), rect.top()) painter.setFont(axis.titleFont()) painter.drawText(rect, Qt.AlignHCenter | Qt.AlignBottom, axis.title()) painter.drawLine(line) painter.setFont(axis.labelFont()) for x, width, label in self._buildData.get('grid_v_labels', []): painter.drawText(x - width / 2.0, 3, width, rect.height() - 6, Qt.AlignHCenter | Qt.AlignTop, label) painter.restore()
def drawAxis(self, painter, rect, axis): """ Draws the axis for the given painter. :param painter | <QPainter> rect | <QRect> """ if not axis: return # draw the axis lines painter.save() pen = QPen(self.axisColor()) pen.setWidth(3) painter.setPen(pen) # draw the vertical line if axis.orientation() == Qt.Vertical: line = QLineF(rect.right(), rect.top(), rect.right(), rect.bottom()) painter.drawLine(line) painter.setFont(axis.labelFont()) for y, height, label in self._buildData.get('grid_h_labels', []): painter.drawText(0, y - height / 2.0, rect.width() - 3, height, Qt.AlignRight | Qt.AlignVCenter, label) painter.translate(0, rect.center().y()) painter.rotate(-90) painter.setFont(axis.titleFont()) painter.drawText(-rect.height()/2, 0, rect.height(), rect.width(), Qt.AlignHCenter | Qt.AlignTop, axis.title()) # draw the horizontal line else: line = QLineF(rect.left(), rect.top(), rect.right(), rect.top()) painter.setFont(axis.titleFont()) painter.drawText(rect, Qt.AlignHCenter | Qt.AlignBottom, axis.title()) painter.drawLine(line) painter.setFont(axis.labelFont()) for x, width, label in self._buildData.get('grid_v_labels', []): painter.drawText(x - width / 2.0, 3, width, rect.height() - 6, Qt.AlignHCenter | Qt.AlignTop, label) painter.restore()
def drawItem(self, item, painter, option): """ Draws the inputed item as a bar graph. :param item | <XChartDatasetItem> painter | <QPainter> option | <QStyleOptionGraphicsItem> """ dataset = item.dataset() painter.save() painter.setRenderHint(painter.Antialiasing) center = item.buildData('center') radius = item.buildData('radius') if int(option.state) & QStyle.State_MouseOver != 0: alpha = 20 mouse_over = True else: alpha = 0 mouse_over = False for value, subpath in item.buildData('subpaths', []): clr = dataset.color(value) bg = clr.lighter(110) bg.setAlpha(alpha + 100) painter.setBrush(bg) if mouse_over: scale = 1.08 dx = (center.x() / scale) - center.x() dy = (center.y() / scale) - center.y() painter.save() painter.scale(scale, scale) painter.translate(dx, dy) painter.setPen(Qt.NoPen) painter.drawPath(subpath) painter.restore() pen = QPen(clr) pen.setWidth(0.5) painter.setPen(pen) painter.drawPath(subpath) painter.restore()
def drawAxis(self, painter): """ Draws the axis for this system. """ # draw the axis lines pen = QPen(self.axisColor()) pen.setWidth(4) painter.setPen(pen) painter.drawLines(self._buildData['axis_lines']) # draw the notches for rect, text in self._buildData['grid_h_notches']: painter.drawText(rect, Qt.AlignTop | Qt.AlignRight, text) for rect, text in self._buildData['grid_v_notches']: painter.drawText(rect, Qt.AlignCenter, text)
def drawAxis( self, painter ): """ Draws the axis for this system. """ # draw the axis lines pen = QPen(self.axisColor()) pen.setWidth(4) painter.setPen(pen) painter.drawLines(self._buildData['axis_lines']) # draw the notches for rect, text in self._buildData['grid_h_notches']: painter.drawText(rect, Qt.AlignTop | Qt.AlignRight, text) for rect, text in self._buildData['grid_v_notches']: painter.drawText(rect, Qt.AlignCenter, text)
def drawItem(self, item, painter, option): """ Draws the inputed item as a bar graph. :param item | <XChartDatasetItem> painter | <QPainter> option | <QStyleOptionGraphicsItem> """ dataset = item.dataset() painter.save() painter.setRenderHint(painter.Antialiasing) pen = QPen(dataset.color()) pen.setWidth(0.75) painter.setPen(pen) for path in item.buildData('subpaths', []): gradient = QLinearGradient() clr = QColor(dataset.color()) clr.setAlpha(220) gradient.setColorAt(0.0, clr.lighter(180)) gradient.setColorAt(0.1, clr.lighter(160)) gradient.setColorAt(0.25, clr.lighter(140)) gradient.setColorAt(1.0, clr.lighter(125)) if self.orientation() == Qt.Vertical: gradient.setStart(0, path.boundingRect().bottom()) gradient.setFinalStop(0, path.boundingRect().top()) else: gradient.setStart(path.boundingRect().left(), 0) gradient.setFinalStop(path.boundingRect().right(), 0) painter.setBrush(gradient) painter.drawPath(path) painter.restore()
def paint( self, painter, option, widget ): """ Paints this item. :param painter | <QPainter> option | <QGraphicsOption> widget | <QWidget> """ painter.save() pen = QPen(self.color()) pen.setWidth(2) painter.setPen(pen) painter.drawPath(self._basePath) painter.setRenderHint(painter.Antialiasing) pen.setColor(QColor('white')) painter.setPen(pen) painter.setBrush(self.color()) for ellipse in self._ellipses: painter.drawEllipse(ellipse, 6, 6) painter.restore()
def paint(self, painter, option, widget): """ Draws this item with the inputed painter. :param painter | <QPainter> rect | <QRect> """ if self._dirty: self.rebuild() scene = self.scene() if not scene: return grid = scene.gridRect() typ = self.chartType() # draw the line chart if typ == XChartScene.Type.Line: painter.setRenderHint(painter.Antialiasing) # draw the path area area = self._buildData.get('path_area') if area and self.isShaded(): clr = QColor(self.color()) clr.setAlpha(120) painter.setPen(Qt.NoPen) painter.setBrush(clr) painter.drawPath(area) # draw the line data pen = QPen(self.color()) pen.setWidth(2) painter.setPen(pen) painter.setBrush(Qt.NoBrush) painter.drawPath(self.path()) if (self.showPointsInLine()): palette = QApplication.palette() pen = QPen(palette.color(palette.Base)) pen.setWidth(2) painter.setBrush(self.color()) painter.setPen(pen) for point in self._ellipses: painter.drawEllipse(point, self.pointRadius(), self.pointRadius()) # draw a bar chart elif typ == XChartScene.Type.Bar: painter.setRenderHint(painter.Antialiasing) pen = QPen(self.color()) pen.setWidth(1) painter.setPen(pen) for key, value, sub_path in self._subpaths: gradient = QLinearGradient() clr = QColor(self.color()) if (sub_path != self._hoveredPath): clr.setAlpha(130) gradient.setColorAt(0.0, clr.lighter(140)) gradient.setColorAt(0.1, clr.lighter(120)) gradient.setColorAt(0.25, clr.lighter(110)) gradient.setColorAt(1.0, clr.lighter(105)) if (self.orientation() == Qt.Horizontal): gradient.setStart(0, sub_path.boundingRect().top()) gradient.setFinalStop(0, sub_path.boundingRect().bottom()) else: gradient.setStart(sub_path.boundingRect().left(), 0) gradient.setFinalStop(sub_path.boundingRect().right(), 0) painter.setBrush(gradient) painter.drawPath(sub_path) # draw a simple pie chart (calculated by scene) elif typ == XChartScene.Type.Pie: painter.setRenderHint(painter.Antialiasing) center = self.pieCenter() radius = self.radius() for key, value, sub_path in self._subpaths: clr = self.keyColor(key) gradient = QRadialGradient(QPointF(0, 0), radius) a = QColor(clr.lighter(140)) b = QColor(clr.lighter(110)) a.setAlpha(40) b.setAlpha(80) # look for mouse over if (sub_path == self._hoveredPath): a.setAlpha(100) b.setAlpha(200) gradient.setColorAt(0, a) gradient.setColorAt(1, b) pen = QPen(clr) pen.setWidth(1) painter.setBrush(gradient) painter.setPen(pen) painter.drawPath(sub_path)
def paint( self, painter, option, widget ): """ Draws this item with the inputed painter. :param painter | <QPainter> rect | <QRect> """ if self._dirty: self.rebuild() scene = self.scene() if not scene: return grid = scene.gridRect() typ = self.chartType() # draw the line chart if typ == XChartScene.Type.Line: painter.setRenderHint(painter.Antialiasing) # draw the path area area = self._buildData.get('path_area') if area and self.isShaded(): clr = QColor(self.color()) clr.setAlpha(120) painter.setPen(Qt.NoPen) painter.setBrush(clr) painter.drawPath(area) # draw the line data pen = QPen(self.color()) pen.setWidth(2) painter.setPen(pen) painter.setBrush(Qt.NoBrush) painter.drawPath(self.path()) if ( self.showPointsInLine() ): palette = QApplication.palette() pen = QPen(palette.color(palette.Base)) pen.setWidth(2) painter.setBrush(self.color()) painter.setPen(pen) for point in self._ellipses: painter.drawEllipse(point, self.pointRadius(), self.pointRadius()) # draw a bar chart elif typ == XChartScene.Type.Bar: painter.setRenderHint(painter.Antialiasing) pen = QPen(self.color()) pen.setWidth(1) painter.setPen(pen) for key, value, sub_path in self._subpaths: gradient = QLinearGradient() clr = QColor(self.color()) if ( sub_path != self._hoveredPath ): clr.setAlpha(130) gradient.setColorAt(0.0, clr.lighter(140)) gradient.setColorAt(0.1, clr.lighter(120)) gradient.setColorAt(0.25, clr.lighter(110)) gradient.setColorAt(1.0, clr.lighter(105)) if ( self.orientation() == Qt.Horizontal ): gradient.setStart(0, sub_path.boundingRect().top()) gradient.setFinalStop(0, sub_path.boundingRect().bottom()) else: gradient.setStart(sub_path.boundingRect().left(), 0) gradient.setFinalStop(sub_path.boundingRect().right(), 0) painter.setBrush(gradient) painter.drawPath(sub_path) # draw a simple pie chart (calculated by scene) elif typ == XChartScene.Type.Pie: painter.setRenderHint(painter.Antialiasing) center = self.pieCenter() radius = self.radius() for key, value, sub_path in self._subpaths: clr = self.keyColor(key) gradient = QRadialGradient(QPointF(0, 0), radius) a = QColor(clr.lighter(140)) b = QColor(clr.lighter(110)) a.setAlpha(40) b.setAlpha(80) # look for mouse over if ( sub_path == self._hoveredPath ): a.setAlpha(100) b.setAlpha(200) gradient.setColorAt(0, a) gradient.setColorAt(1, b) pen = QPen(clr) pen.setWidth(1) painter.setBrush(gradient) painter.setPen(pen) painter.drawPath(sub_path)