def paintEvent(self, e): height = self.height() width = self.width() # draw background painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing) painter.setPen(Qt.transparent) painter.setBrush(BACKGROUND) painter.setOpacity(1) path = QPainterPath() path.setFillRule(Qt.WindingFill) path.addRoundedRect(QRectF(8, 0, width - 8, height), 15, 15) painter.drawPath(path.simplified()) # draw sidebar painter.setBrush(SIDEBAR) painter.setOpacity(1) path = QPainterPath() path.setFillRule(Qt.WindingFill) # we draw a fixed-width toolbar background path.addRoundedRect(QRectF(8, 0, 250 - 8, height), 15, 15) path.addRect(QRectF(200, 0, 50, 50)) path.addRect(QRectF(200, height - 50, 50, 50)) painter.drawPath(path.simplified())
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)