def paint_data(self, data, painter, rectangle, option=None,**kwargs): painter.save() r = rectangle x = r.bottomLeft().x() y = r.topRight().y() lx = r.width() / 101. ly = r.height() / 101. points = data['color_points'].keys() orientation = kwargs.get('orientation',QtCore.Qt.Horizontal) if len(points) > 1: points.sort() prev_point = points[0] prev_color = tuple([255 * data['color_points'][prev_point][c] for c in [0, 1, 2]]) for point in points[1:]: if orientation == QtCore.Qt.Horizontal: gradient = QtGui.QLinearGradient(x + prev_point * 100 * lx, y, x + point * 100 * lx + 1, y) elif orientation == QtCore.Qt.Vertical: gradient = QtGui.QLinearGradient(x, y + r.height() - prev_point * 100 * ly, x, y + r.height() - point * 100 * ly - 1) gradient.setColorAt(0, QtGui.QColor(*prev_color)) color = tuple([255 * data['color_points'][point][c] for c in [0, 1, 2]]) gradient.setColorAt(1, QtGui.QColor(*color)) if orientation == QtCore.Qt.Horizontal: painter.fillRect(x + prev_point * 100 * lx, y, (point - prev_point) * 100 * lx + 1, r.height(), gradient) elif orientation == QtCore.Qt.Vertical: painter.fillRect(x, y + r.height() - prev_point * 100 * ly, r.width(), -(point - prev_point) * 100 * ly - 1, gradient) prev_point = point prev_color = color painter.restore()
def paint(self, painter, paintOptions, widget): myRect = self.boundingRect() painter.fillRect(self.__headerRect, self.__darkerColor) gradTop = self.__headerRect.bottomLeft() gradBot = gradTop + QtCore.QPointF(0, 4) gradient = QtGui.QLinearGradient(gradTop, gradBot) gradient.setColorAt(0, self.__shadowColor) gradient.setColorAt(1, self.__color) brush = QtGui.QBrush(gradient) bottomRect = myRect.adjusted(0, self.__headerRect.bottom(), 0, 0) painter.fillRect(bottomRect, brush) if not safeEffects: oldPen = painter.pen() pen = QtGui.QPen() pen.setColor(QtGui.QColor(10, 10, 10, 100)) pen.setWidth(1) painter.setPen(pen) painter.drawRect(myRect.adjusted(0.5, 0.5, -0.5, -0.5)) painter.setPen(oldPen) painter.setBrush(QtGui.QBrush(self.__darkerColor)) painter.drawConvexPolygon(self.__handlePoly)
def setupPainter(self, painter, orientation, x1, y1, x2, y2): highlight = self.palette().color(QtGui.QPalette.Highlight) gradient = QtGui.QLinearGradient(x1, y1, x2, y2) gradient.setColorAt(0, highlight.lighter(108)) gradient.setColorAt(1, highlight.lighter(108)) painter.setBrush(gradient) if orientation == QtCore.Qt.Horizontal: painter.setPen(QtGui.QPen(highlight.darker(130), 0)) else: painter.setPen(QtGui.QPen(highlight.darker(150), 0))
def drawSpan(self, painter, rect): opt = QtGui.QStyleOptionSlider() QtGui.QSlider.initStyleOption(self, opt) # area groove = self.style().subControlRect(QtGui.QStyle.CC_Slider, opt, QtGui.QStyle.SC_SliderGroove, self) if opt.orientation == QtCore.Qt.Horizontal: groove.adjust(0, 0, -1, 0) else: groove.adjust(0, 0, 0, -1) # pen & brush painter.setPen(QtGui.QPen(self.gradientLeft, 0)) if opt.orientation == QtCore.Qt.Horizontal: self.setupPainter(painter, opt.orientation, groove.center().x(), groove.top(), groove.center().x(), groove.bottom()) else: self.setupPainter(painter, opt.orientation, groove.left(), groove.center().y(), groove.right(), groove.center().y()) # draw groove intersected = QtCore.QRectF(rect.intersected(groove)) gradient = QtGui.QLinearGradient(intersected.topLeft(), intersected.topRight()) gradient.setColorAt(0, self.gradientLeft) gradient.setColorAt(1, self.gradientRight) painter.fillRect(intersected, gradient)