def brushChanged(self): style = QtCore.Qt.BrushStyle( self.brushStyleComboBox.itemData( self.brushStyleComboBox.currentIndex(), IdRole)) if style == QtCore.Qt.LinearGradientPattern: linearGradient = QtGui.QLinearGradient(0, 0, 100, 100) linearGradient.setColorAt(0.0, QtCore.Qt.white) linearGradient.setColorAt(0.2, QtCore.Qt.green) linearGradient.setColorAt(1.0, QtCore.Qt.black) self.renderArea.setBrush(QtGui.QBrush(linearGradient)) elif style == QtCore.Qt.RadialGradientPattern: radialGradient = QtGui.QRadialGradient(50, 50, 50, 70, 70) radialGradient.setColorAt(0.0, QtCore.Qt.white) radialGradient.setColorAt(0.2, QtCore.Qt.green) radialGradient.setColorAt(1.0, QtCore.Qt.black) self.renderArea.setBrush(QtGui.QBrush(radialGradient)) elif style == QtCore.Qt.ConicalGradientPattern: conicalGradient = QtGui.QConicalGradient(50, 50, 150) conicalGradient.setColorAt(0.0, QtCore.Qt.white) conicalGradient.setColorAt(0.2, QtCore.Qt.green) conicalGradient.setColorAt(1.0, QtCore.Qt.black) self.renderArea.setBrush(QtGui.QBrush(conicalGradient)) elif style == QtCore.Qt.TexturePattern: self.renderArea.setBrush( QtGui.QBrush(QtGui.QPixmap(':/images/brick.png'))) else: self.renderArea.setBrush(QtGui.QBrush(QtCore.Qt.green, style))
def rebuildDataBrushIfNeeded(self): if self.rebuildBrush: self.rebuildBrush = False dataBrush = QtGui.QConicalGradient() dataBrush.setCenter(0.5, 0.5) dataBrush.setCoordinateMode(QtGui.QGradient.StretchToDeviceMode) for pos, color in self.gradientData: dataBrush.setColorAt(1.0 - pos, color) # angle dataBrush.setAngle(self.nullPosition) p = self.palette() p.setBrush(QtGui.QPalette.Highlight, dataBrush) self.setPalette(p)
def __init__(self): QtGui.QWidget.__init__(self) size = 24 self.setFixedSize(size, size) self.pen_width = 5 top = left = self.pen_width / 2. bottom = right = size - 1 - self.pen_width self.area = QtCore.QRectF(top, left, right, bottom) self.brush = QtGui.QConicalGradient(.5, .5, 0) self.brush.setCoordinateMode(QtGui.QConicalGradient.ObjectBoundingMode) self.brush.setColorAt(0, QtCore.Qt.darkGray) self.brush.setColorAt(1, QtCore.Qt.lightGray) self.pen = QtGui.QPen(self.brush, self.pen_width) self.loading_timer = QtCore.QTimer() self.loading_timer.setInterval(20) self.loading_timer.timeout.connect(self.rotate)
def paintEvent(self, event): painter = QtGui.QPainter(self) painter.setRenderHint(painter.Antialiasing) rect = event.rect() gauge_rect = QtCore.QRect(rect) size = gauge_rect.size() pos = gauge_rect.center() gauge_rect.moveCenter( QtCore.QPoint(pos.x() - size.width(), pos.y() - size.height())) gauge_rect.setSize(size * .9) gauge_rect.moveCenter(pos) refill_rect = QtCore.QRect(gauge_rect) size = refill_rect.size() pos = refill_rect.center() refill_rect.moveCenter( QtCore.QPoint(pos.x() - size.width(), pos.y() - size.height())) # smaller than .9 == thicker gauge refill_rect.setSize(size * .9) refill_rect.moveCenter(pos) painter.setPen(QtCore.Qt.NoPen) painter.drawPixmap(rect, self._bg) painter.save() grad = QtGui.QConicalGradient(QtCore.QPointF(gauge_rect.center()), 270.0) grad.setColorAt(.75, QtCore.Qt.green) grad.setColorAt(.5, QtCore.Qt.yellow) grad.setColorAt(.25, QtCore.Qt.red) painter.setBrush(grad) painter.drawPie(gauge_rect, 225.0 * 16, self._value * 16) painter.restore() painter.setBrush(QtGui.QBrush(self._bg.scaled(rect.size()))) painter.drawEllipse(refill_rect) super(GaugeWidget, self).paintEvent(event)
def initUI(self): self._conicalGradient = QtGui.QConicalGradient( self.width() / 2, self.height() / 2, 180) self._conicalGradient.setColorAt(0.0, QtGui.QColor(0, 255, 255)) self._conicalGradient.setColorAt(0.16, QtGui.QColor(0, 0, 255)) self._conicalGradient.setColorAt(0.33, QtGui.QColor(255, 0, 255)) self._conicalGradient.setColorAt(0.5, QtGui.QColor(255, 0, 0)) self._conicalGradient.setColorAt(0.66, QtGui.QColor(255, 255, 0)) self._conicalGradient.setColorAt(0.83, QtGui.QColor(0, 255, 0)) self._conicalGradient.setColorAt(1.0, QtGui.QColor(0, 255, 255)) self._vertical_gradient = QtGui.QLinearGradient( 0, self._rect.top(), 0, self._rect.top() + self._rect.height()) self._vertical_gradient.setColorAt(0.0, QtGui.QColor(0, 0, 0, 0)) self._vertical_gradient.setColorAt(1.0, QtGui.QColor(0, 0, 0)) self._horizontal_gradient = QtGui.QLinearGradient( self._rect.left(), 0, self._rect.left() + self._rect.width(), 0) self._horizontal_gradient.setColorAt(0.0, QtGui.QColor(255, 255, 255))
def __init__(self, centerX = 0, centerY = 0, angle = 0, alpha = 1): super(ConicalGradientColor, self).__init__(alpha) self.value = QtGui.QConicalGradient(centerX, centerY, angle)
def paintEvent(self, event): """ paintEvent(QPaintEvent event) Custom paint event to draw the gauge. """ # In this paint event, we start with the original # rectangle region from the QPaintEvent, and progressively # shrink it down from the center to add more and more layers. painter = QtGui.QPainter(self) painter.setRenderHint(painter.Antialiasing) rect = event.rect() center = QtCore.QPointF(rect.center()) painter.setPen(QtCore.Qt.NoPen) # # outer rim # grad = QtGui.QConicalGradient(center, 315) dark = QtGui.QColor(35, 35, 35) light = QtGui.QColor(185, 185, 185) grad.setStops([(0.0, dark), (0.5, light), (1.0, dark)]) painter.setBrush(grad) painter.drawEllipse(rect) # # inner rim # inner_bevel = self.centerScaleRect(rect, .93) grad.setAngle(135) dark = QtGui.QColor(80, 80, 80) grad.setColorAt(0.0, dark) grad.setColorAt(1.0, dark) painter.setBrush(grad) painter.drawEllipse(inner_bevel) # # flat gray surface # inside_panel = self.centerScaleRect(inner_bevel, .95) flat_gray = QtGui.QColor(50, 50, 50) painter.setBrush(flat_gray) painter.drawEllipse(inside_panel) # # colored gauge values # grad.setAngle(270) grad.setStops([(.2, QtGui.QColor(205, 0, 0)), (.5, QtCore.Qt.yellow), (.8, QtGui.QColor(0, 205, 0))]) painter.setBrush(grad) # This remaps the float value to the stop angle # appropriate for the drawPie() in the paint method # Negative values mean clockwise # http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qpainter.html#drawPie stopAngle = self._value * -270 # start and stop angle for drawPie() are in 1/16th of a degree # incriments, so we mult them by 16 painter.drawPie(inside_panel, 225.0 * 16, stopAngle * 16) # # fill back in the inner flat gray surface (cutout) # inside_panel = self.centerScaleRect(inside_panel, .9) painter.setBrush(flat_gray) painter.drawEllipse(inside_panel) super(GaugeWidget, self).paintEvent(event)