def paintEvent(self, event): # 设置阴影 painter_path = QPainterPath() painter_path.setFillRule(Qt.WindingFill) painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing) painter.fillPath(painter_path, QBrush(Qt.white)) # 阴影颜色 color = QColor(0, 250, 255, 50) for i in range(10): i_path = QPainterPath() i_path.setFillRule(Qt.WindingFill) ref = QRectF(10 - i, 10 - i, self.width() - (10 - i) * 2, self.height() - (10 - i) * 2) i_path.addRoundedRect(ref, 20, 20) color.setAlpha(150 - i**0.5 * 50.0) painter.setPen(color) painter.drawPath(i_path) # 圆角 painter_rect = QPainter(self) painter_rect.setRenderHint(QPainter.Antialiasing) # 抗锯齿 color_bg = QColor(170, 248, 248, 240) # 设置背警色 painter_rect.setBrush(color_bg) painter_rect.setPen(Qt.transparent) self._rect = self.rect() self._rect.setLeft(15) self._rect.setTop(15) self._rect.setWidth(self._rect.width() - 15) self._rect.setHeight(self._rect.height() - 15) painter_rect.drawRoundedRect(self._rect, 15, 15)
def generateCode(article, week, lot): #function returns QPicture object containing DataMatrix code with given article, week, lot toBeEncoded = 'S/N %s, Lot %s, Date %s' % (article, lot, week) bar = toBeEncoded.encode('utf-8') encoded_bar = dmtx.encode(bar) img = Image.frombytes('RGB', (encoded_bar.width, encoded_bar.height), encoded_bar.pixels) img = img.resize(qr_size) qimg = ImageQt(img) picture = QPicture() painter = QPainter() painter.begin(picture) if frame_options['pen-color'] != Qt.Qt.white: painter.setBrush(QBrush(Qt.Qt.white)) painter.setFont(QFont(font['family'], font['size'], font['weight'])) if frame_options['pen-color'] != Qt.Qt.white: old_pen = painter.pen() painter.setPen( QPen(frame_options['pen-color'], frame_options['pen-width'])) painter.drawRoundedRect(0, 0, *label_size, frame_options['radius'], frame_options['radius']) painter.setPen(old_pen) painter.drawText(*item_positions['article'], "S/N " + article) painter.drawText(*item_positions['week'], "Date " + week) painter.drawText(*item_positions['lot'], "Lot " + lot) painter.drawImage(*item_positions['code'], qimg) painter.end() return picture
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 paintEvent(self, event): if not self.displayedWhenStopped and not self.isAnimated(): return width = min(self.width(), self.height()) p = QPainter(self) p.setRenderHint(QPainter.Antialiasing) outerRadius = (width - 1) * 0.5 innerRadius = (width - 1) * 0.5 * 0.38 capsuleHeight = outerRadius - innerRadius capsuleWidth = capsuleHeight * 0.23 if width > 32 else capsuleHeight * 0.35 capsuleRadius = capsuleWidth / 2 for i in range(12): color = QColor(self.color) color.setAlphaF(float(1.0 - float(i / 12.0))) p.setPen(Qt.NoPen) p.setBrush(color) p.save() p.translate(self.rect().center()) p.rotate(self.angle - float(i * 30.0)) p.drawRoundedRect(-capsuleWidth * 0.5,\ -(innerRadius + capsuleHeight),\ capsuleWidth,\ capsuleHeight,\ capsuleRadius,\ capsuleRadius) p.restore()
def __init__(self, text, parent): super(DragLabel, self).__init__(parent) metric = QFontMetrics(self.font()) size = metric.size(Qt.TextSingleLine, text) image = QImage(size.width() + 12, size.height() + 12, QImage.Format_ARGB32_Premultiplied) image.fill(qRgba(0, 0, 0, 0)) font = QFont() font.setStyleStrategy(QFont.ForceOutline) painter = QPainter() painter.begin(image) painter.setRenderHint(QPainter.Antialiasing) painter.setBrush(Qt.white) painter.drawRoundedRect( QRectF(0.5, 0.5, image.width() - 1, image.height() - 1), 25, 25, Qt.RelativeSize) painter.setFont(font) painter.setBrush(Qt.black) painter.drawText(QRect(QPoint(6, 6), size), Qt.AlignCenter, text) painter.end() self.setPixmap(QPixmap.fromImage(image)) self.labelText = text
def paintEvent(self, event): # This method is, in practice, drawing the contents of # your window. # get current window size s = self.size() qp = QPainter() qp.begin(self) qp.setRenderHint(QPainter.Antialiasing, True) qp.setPen(self.penColor) qp.setBrush(self.fillColor) qp.drawRect(0, 0, s.width(), s.height()) # drawpopup qp.setPen(self.popup_penColor) qp.setBrush(self.popup_fillColor) popup_width = 300 popup_height = 120 ow = int(s.width()/2-popup_width/2) oh = int(s.height()/2-popup_height/2) qp.drawRoundedRect(ow, oh, popup_width, popup_height, 5, 5) font = QFont() font.setPixelSize(18) font.setBold(True) qp.setFont(font) qp.setPen(QColor(70, 70, 70)) qp.end()
def paintEvent(self, event): label = "ON" if self.isChecked() else "OFF" bg_color = Qt.Qt.green if self.isChecked() else Qt.Qt.red radius = 10 width = 32 center = self.rect().center() painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing) painter.translate(center) painter.setBrush(QColor(170, 170, 170)) pen = QPen(Qt.Qt.white) pen.setWidth(2) painter.setPen(pen) painter.drawRoundedRect( Qt.QRect(-width, -radius, 2 * width, 2 * radius), radius, radius) painter.setBrush(QBrush(bg_color)) sw_rect = Qt.QRect(-radius, -radius, width + radius, 2 * radius) if not self.isChecked(): sw_rect.moveLeft(-width) painter.drawRoundedRect(sw_rect, radius, radius) painter.drawText(sw_rect, Qt.Qt.AlignCenter, label)
def drawPrimitive(self, element, style_option: QStyleOption, painter: QPainter, widget=None): if element == QStyle.PE_FrameGroupBox: top_margin = max( self.pixelMetric(QStyle.PM_ExclusiveIndicatorHeight), style_option.fontMetrics.height()) + 3 frame_rect = style_option.rect.adjusted(0, top_margin, -1, -1) tab_frame_color = get_tab_frame_color(style_option.palette) painter.save() painter.setRenderHint(QPainter.Antialiasing) painter.translate(0.5, 0.5) painter.setPen( merged_colors(get_outline_color(style_option.palette), tab_frame_color)) painter.setBrush( merged_colors(style_option.palette.window().color(), tab_frame_color)) painter.drawRoundedRect(frame_rect, rounded_rect_radius(), rounded_rect_radius()) painter.restore() else: QProxyStyle.drawPrimitive(self, element, style_option, painter, widget)
def paintEvent(self, event): if (not self.m_displayedWhenStopped) and (not self.isAnimated()): return width = min(self.width(), self.height()) painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing) outerRadius = (width - 1) * 0.5 innerRadius = (width - 1) * 0.5 * 0.4375 capsuleHeight = outerRadius - innerRadius capsuleWidth = width * 3 / 32 capsuleRadius = capsuleWidth / 2 for i in range(0, 12): color = QtGui.QColor(self.m_color) if self.isAnimated(): color.setAlphaF(1.0 - (i / 12.0)) else: color.setAlphaF(0.2) painter.setPen(Qt.NoPen) painter.setBrush(color) painter.save() painter.translate(self.rect().center()) painter.rotate(self.m_angle - (i * 30.0)) painter.drawRoundedRect(capsuleWidth * -0.5, (innerRadius + capsuleHeight) * -1, capsuleWidth, capsuleHeight, capsuleRadius, capsuleRadius) painter.restore()
def getFileIcon(self): # _text = Path(self.alt).name _suffix = Path(self.alt).suffix.upper() _suffix = _suffix[1:] if _suffix else "(Unknown)" _pixmap = QPixmap(120, 120) _pixmap.fill(QColor(0, 0, 0, 0)) _painter = QPainter(_pixmap) _painter.setRenderHints(QPainter.Antialiasing | QPainter.TextAntialiasing) # draw rounded rect _pen = _painter.pen() _pen.setWidth(2) _painter.setPen(_pen) _painter.drawRoundedRect(QRect(1, 1, 118, 118), 15, 15) # draw suffix text _rect = QRect(8, 10, 108, 35) #100*25 _painter.setPen(QPen(QColor("#0f59a4"))) _painter.setFont(CFG.FONT_ICON_SUFFIX('MFHistoryItem')) _painter.drawText(_rect, Qt.AlignHCenter | Qt.TextSingleLine, _suffix) _painter.setPen(_pen) # draw splitter _painter.drawLine(1, 40, 118, 40) # draw suffix text _rect = QRect(8, 45, 108, 110) #100*65 _painter.setFont(CFG.FONT_ICON_NAME('MFHistoryItem')) _fm = QFontMetrics(_painter.font()) # _elided_text = _fm.elidedText(_text, Qt.ElideMiddle, _rect.width(), Qt.TextWrapAnywhere) _painter.drawText(_rect, Qt.AlignHCenter | Qt.TextWrapAnywhere, _text) del _painter return _pixmap
def draw_rgb(painter: QPainter, size: int, color: QColor): r, g, b, _ = color.getRgb() rgb = list(map(str, [r, g, b])) text_color, back_color = Qt.black, Qt.white w_rgb, h_rgb = size // 4, size // 6 font = get_optimal_font(FAMILY_FONT, w_rgb, h_rgb, text='255') font.setWeight(QFont.Bold) y = size - size // 4 indent = (size * 0.25) // 4 radius = 30 for i, value in enumerate(rgb): x = indent + indent * i + w_rgb * i painter.save() painter.setPen(Qt.NoPen) painter.setBrush(back_color) painter.drawRoundedRect(x, y, w_rgb, h_rgb, radius, radius, Qt.RelativeSize) painter.restore() painter.save() painter.setPen(text_color) painter.setFont(font) painter.drawText(x, y, w_rgb, h_rgb, Qt.AlignCenter, value) painter.restore()
def paintEvent(self, event): super(FramelessWindow, self).paintEvent(event) m = 9 path = QPainterPath() path.setFillRule(Qt.WindingFill) path.addRect(m, m, self.width() - m * 2, self.height() - m * 2) painter = QPainter(self) painter.fillPath(path, QBrush(Qt.white)) color = QColor(100, 100, 100, 100) for i in range(m): path = QPainterPath() path.setFillRule(Qt.WindingFill) path.addRoundedRect(m - i, m - i, self.width() - (m - i) * 2, self.height() - (m - i) * 2, 1, 1) color.setAlpha(100 - 10 * i) painter.setPen(QPen(color, 1, Qt.SolidLine)) painter.drawRoundedRect( QRect(m - i, m - i, self.width() - (m - i) * 2, self.height() - (m - i) * 2), 0, 0)
def __init__(self, text, parent): super(DragLabel, self).__init__(parent) metric = QFontMetrics(self.font()) size = metric.size(Qt.TextSingleLine, text) image = QImage(size.width() + 12, size.height() + 12, QImage.Format_ARGB32_Premultiplied) image.fill(qRgba(0, 0, 0, 0)) font = QFont() font.setStyleStrategy(QFont.ForceOutline) painter = QPainter() painter.begin(image) painter.setRenderHint(QPainter.Antialiasing) painter.setBrush(Qt.white) painter.drawRoundedRect(QRectF(0.5, 0.5, image.width() - 1, image.height() - 1), 25, 25, Qt.RelativeSize) painter.setFont(font) painter.setBrush(Qt.black) painter.drawText(QRect(QPoint(6, 6), size), Qt.AlignCenter, text) painter.end() self.setPixmap(QPixmap.fromImage(image)) self.labelText = text
class RoundedPushButton1(QPushButton): def __init__(self,parent, default_wide, default_high,text=''): QPushButton.__init__(self, parent) #self.resize(100,80) self.default_high=default_high self.default_wide=default_wide self.xrd=self.default_wide/10 #self.yrd=self.default_high/10 self.yrd=self.xrd #self.resize(self.default_wide,self.default_high) self.backgroundColor = QPalette().light().color() self.backgroundColor.setRgb(157,157,157) #(220,203,231) #self.backgroundColor.setAlpha(0) self.brush=QBrush(Qt.SolidPattern) self.textlabel=textQLabel(self,text) def paintEvent(self,event): #brush.setStyle(Qt.Dense1Pattern) self.brush.setColor(self.backgroundColor) self.painter=QPainter(self) self.painter.setRenderHint(QPainter.Antialiasing) self.painter.setPen(Qt.NoPen) self.painter.setBrush(self.brush) self.painter.drawRoundedRect(QRect(0,0,self.default_wide,self.default_high), self.xrd, self.yrd) #self.painter.drawPixmap(self.imgx, self.imgy, self.piximg) self.painter.end()
def paintEvent(self, event): if not (self._imageRainbow or self._imageAlpha): return super(CColorSlider, self).paintEvent(event) option = QStyleOptionSlider() self.initStyleOption(option) # 背景Rect groove = self.style().subControlRect(QStyle.CC_Slider, option, QStyle.SC_SliderGroove, self) groove.adjust(3, 5, -3, -5) # 滑块Rect handle = self.style().subControlRect(QStyle.CC_Slider, option, QStyle.SC_SliderHandle, self) handle.setX(max(min(handle.x(), self.width() - self.height()), 0)) handle.setWidth(self.height()) handle.setHeight(self.height()) radius = self.height() / 2 painter = QPainter(self) painter.setPen(Qt.NoPen) painter.drawImage( groove, self._imageRainbow if self._imageRainbow else self._imageAlpha) if not self._imageCircle or not self._imageCircleHover: painter.setBrush( QColor(245, 245, 245) if option.state & QStyle.State_MouseOver else QColor(254, 254, 254)) painter.drawRoundedRect(handle, radius, radius) else: painter.drawImage( handle, self._imageCircleHover if option.state & QStyle.State_MouseOver else self._imageCircle)
def paintEvent(self, e): """ 绘制背景 """ painter = QPainter(self) painter.setRenderHints(QPainter.Antialiasing | QPainter.SmoothPixmapTransform) painter.setPen(QPen(QColor(190, 190, 190, 150))) painter.setBrush(QBrush(QColor(227, 227, 227))) painter.drawRoundedRect(self.rect(), 8, 8)
def paintEvent(self, e): """ draw pixmap with border radius We found two way to draw pixmap with border radius, one is as follow, the other way is using bitmap mask, but in our practice, the mask way has poor render effects """ if self._pixmap is None: return radius = 3 painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing) painter.setRenderHint(QPainter.SmoothPixmapTransform) scaled_pixmap = self._pixmap.scaledToWidth( self.width(), mode=Qt.SmoothTransformation) size = scaled_pixmap.size() brush = QBrush(scaled_pixmap) painter.setBrush(brush) painter.setPen(Qt.NoPen) y = (size.height() - self.height()) // 2 painter.save() painter.translate(0, -y) rect = QRect(0, y, self.width(), self.height()) painter.drawRoundedRect(rect, radius, radius) painter.restore() painter.end()
def paintEvent(self, event): s = self.size() qp = QPainter() qp.begin(self) qp.setRenderHint(QPainter.Antialiasing, True) pen = QPen(Qt.NoPen) qp.setPen(pen) qp.setBrush(QColor(154, 205, 50)) if self.__enabled: qp.setBrush(QColor(154, 190, 50)) qp.drawRoundedRect(0, 0, s.width(), s.height(), 10, 10) # lg = QLinearGradient(0, 25, 70, 0) # lg.setColorAt(0, QColor(154, 184, 50)) # lg.setColorAt(0.35, QColor(154, 210, 50)) # lg.setColorAt(0.85, QColor(154, 184, 50)) # qp.setBrush(lg) # qp.drawRoundedRect(1, 1, s.width() - 2, s.height() - 2, 8, 8) else: qp.setBrush(QColor(255, 255, 255)) qp.drawRoundedRect(0, 0, s.width(), s.height(), 10, 10) # lg = QLinearGradient(5, 25, 60, 0) # lg.setColorAt(0, QColor(190, 190, 190)) # lg.setColorAt(0.35, QColor(230, 230, 230)) # lg.setColorAt(0.85, QColor(190, 190, 190)) # qp.setBrush(lg) # qp.drawRoundedRect(1, 1, s.width() - 2, s.height() - 2, 8, 8) qp.end()
def paintEvent(self, QPaintEvent): self.updatePosition() painter = QPainter(self) painter.fillRect(self.rect(), Qt.transparent) painter.setRenderHint(QPainter.Antialiasing, True) if self._currentCounter >= self._numberOfLines: self._currentCounter = 0 painter.setPen(Qt.NoPen) for i in range(0, self._numberOfLines): painter.save() painter.translate(self._innerRadius + self._lineLength, self._innerRadius + self._lineLength) rotateAngle = float(360 * i) / float(self._numberOfLines) painter.rotate(rotateAngle) painter.translate(self._innerRadius, 0) distance = self.lineCountDistanceFromPrimary( i, self._currentCounter, self._numberOfLines) color = self.currentLineColor(distance, self._numberOfLines, self._trailFadePercentage, self._minimumTrailOpacity, self._color) painter.setBrush(color) rect = QRect(0, -self._lineWidth/2, self._lineLength, self._lineWidth) painter.drawRoundedRect( rect, self._roundness, self._roundness, Qt.RelativeSize) painter.restore()
def paintEvent(self, paintEvent): painter = QPainter(self) painter.setBrush(QColor("#CCCCFF")) painter.setPen(QColor("#00FF00")) painter.setRenderHint(QPainter.Antialiasing) ## 抗锯齿 painter.drawRoundedRect(0, 0, self.width() - 1, self.height() - 1, 20, 20) painter.translate(self.width() / 2, self.height() / 2) painter.rotate(self.cnt) painter.translate(-self.width() / 2, -self.height() / 2) painter.drawPixmap(0, 0, self.width(), self.height(), self.pix) if self.cnt >= 360: self.cnt = 0 else: self.cnt += 1 # #新建一个QTimer对象 # self.timer = QBasicTimer() # self.timer.start(1000, self) # # # 覆写计时器事件处理函数timerEvent() # def timerEvent(self, event): # self.lcd.display(time.strftime("%X",time.localtime()))
def paintEvent(self, event): self._update_position() painter = QPainter(self) painter.fillRect(self.rect(), Qt.transparent) painter.setRenderHint(QPainter.Antialiasing, True) if self._current_counter > self._number_of_lines: self._current_counter = 0 painter.setPen(Qt.NoPen) for i in range(self._number_of_lines): painter.save() painter.translate(self._inner_radius + self._line_length, self._inner_radius + self._line_length) rotate_angle = 360.0 * i / self._number_of_lines painter.rotate(rotate_angle) painter.translate(self._inner_radius, 0) distance = self._line_count_distance_from_primary( i, self._current_counter, self._number_of_lines) color = self._current_line_color(distance, self._number_of_lines, self._trail_fade_percentage, self._minimum_trail_opacity, self._color) painter.setBrush(color) painter.drawRoundedRect( QRect(0, -self._line_width // 2, self.line_length, self._line_length), self._roundness, Qt.RelativeSize) painter.restore()
def paintEvent(self, event): painter = QPainter(self) drawColor = Qt.gray if not self.file_over else Qt.blue pen = QPen() pen.setDashPattern([4, 2]) pen.setWidth(3) pen.setColor(drawColor) painter.setPen(pen) painter.setRenderHint(QPainter.Antialiasing) # Rounded dashed rect painter.translate(self.width() / 2 - 60, self.height() / 2 - 60) painter.drawRoundedRect(0, 0, 120, 120, 25.0, 25.0) # Arrow painter.translate(22, 30) arrow = QPainterPath() arrow.moveTo(20, 40) arrow.lineTo(30, 40) arrow.lineTo(30, 1) arrow.lineTo(50, 1) arrow.lineTo(50, 40) arrow.lineTo(60, 40) arrow.lineTo(40, 60) arrow.closeSubpath() painter.setPen(Qt.NoPen) painter.setBrush(drawColor) painter.drawPath(arrow)
def paintEvent(self, event): if not self.isDisplayedWhenStopped() and not self.isRunning(): return width = min(self.width(), self.height()) p = QPainter(self) p.setRenderHint(QPainter.Antialiasing) outerRadius = (width-1) * 0.5 innerRadius = (width-1) * 0.5 * 0.38 capsuleHeight = outerRadius - innerRadius capsuleWidth = capsuleHeight * 0.23 if width > 32 else capsuleHeight * 0.35 capsuleRadius = capsuleWidth / 2 for i in range(12): color = QColor(self.color) color.setAlphaF(float(1.0 - float(i / 12.0))) p.setPen(Qt.NoPen) p.setBrush(color) p.save() p.translate(self.rect().center()) p.rotate(self._angle - float(i * 30.0)) p.drawRoundedRect(-capsuleWidth * 0.5, -(innerRadius + capsuleHeight), capsuleWidth, capsuleHeight, capsuleRadius, capsuleRadius) p.restore()
def paintEvent(self, event): paint = QPainter(self) paint.setBrush(QColor("#f5f5f5")) pen = QPen() pen.setColor(QColor("#f5f5f5")) paint.setPen(pen) paint.drawRoundedRect(self.rect(), 10.0, 10.0)
def paintEvent(self, QPaintEvent): self.updatePosition() painter = QPainter(self) painter.fillRect(self.rect(), Qt.transparent) painter.setRenderHint(QPainter.Antialiasing, True) if self._currentCounter >= self._numberOfLines: self._currentCounter = 0 painter.setPen(Qt.NoPen) for i in range(0, self._numberOfLines): painter.save() painter.translate(self._innerRadius + self._lineLength, self._innerRadius + self._lineLength) rotateAngle = float(360 * i) / float(self._numberOfLines) painter.rotate(rotateAngle) painter.translate(self._innerRadius, 0) distance = self.lineCountDistanceFromPrimary( i, self._currentCounter, self._numberOfLines) color = self.currentLineColor(distance, self._numberOfLines, self._trailFadePercentage, self._minimumTrailOpacity, self._color) painter.setBrush(color) painter.drawRoundedRect( QRect(0, -self._lineWidth / 2, self._lineLength, self._lineWidth), self._roundness, self._roundness, Qt.RelativeSize) painter.restore()
def paintEvent(self, event): """ paints the fancy on/off button :param event: needs to be set, eventough no event is captured. It is so, because paintEvent is overwriting an existing function in QPushButton """ label = "ON" if self.isChecked() else "OFF" bg_color = Qt.black radius = 10 width = 32 center = self.rect().center() painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing) painter.translate(center) painter.setBrush(QColor(255, 255, 255)) pen = QPen(Qt.gray) pen.setWidth(2) painter.setPen(pen) painter.drawRoundedRect(QRect(-width, -radius, 2 * width, 2 * radius), radius, radius) painter.setBrush(QBrush(bg_color)) sw_rect = QRect(-radius, -radius, width + radius, 2 * radius) if not self.isChecked(): sw_rect.moveLeft(-width) painter.drawRoundedRect(sw_rect, radius, radius) painter.drawText(sw_rect, Qt.AlignCenter, label)
def paintEvent(self, event): painter = QPainter(self) if self.fUseCustomPaint: painter.setBrush(QColor(36, 36, 36)) painter.setPen(QColor(62, 62, 62)) painter.drawRect(2, 2, self.width()-4, self.height()-4) painter.setBrush(self.fViewBg) painter.setPen(self.fViewBg) painter.drawRect(3, 3, self.width()-6, self.height()-6) else: painter.setBrush(self.fViewBg) painter.setPen(self.fViewBg) painter.drawRoundedRect(3, 3, self.width()-6, self.height()-6, 3, 3) self.fScene.render(painter, self.fRenderTarget, self.fRenderSource, Qt.KeepAspectRatio) width = self.fViewRect[iWidth]/self.fScale height = self.fViewRect[iHeight]/self.fScale if width > self.kInternalWidth: width = self.kInternalWidth if height > self.kInternalHeight: height = self.kInternalHeight # cursor painter.setBrush(self.fViewBrush) painter.setPen(self.fViewPen) painter.drawRect(self.fViewRect[iX]+self.fInitialX, self.fViewRect[iY]+3, width, height) if self.fUseCustomPaint: event.accept() else: QFrame.paintEvent(self, event)
def paintEvent(self, event): super(CAvatar, self).paintEvent(event) # 画笔 painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing, True) painter.setRenderHint(QPainter.HighQualityAntialiasing, True) painter.setRenderHint(QPainter.SmoothPixmapTransform, True) # 绘制 path = QPainterPath() diameter = min(self.width(), self.height()) if self.shape == self.Circle: radius = int(diameter / 2) elif self.shape == self.Rectangle: radius = 4 halfW = self.width() / 2 halfH = self.height() / 2 painter.translate(halfW, halfH) path.addRoundedRect( QRectF(-halfW, -halfH, diameter, diameter), radius, radius) painter.setClipPath(path) # 如果是动画效果 if self.rotateAnimation.state() == QPropertyAnimation.Running: painter.rotate(self._angle) # 旋转 painter.drawPixmap( QPointF(-self.pixmap.width() / 2, -self.pixmap.height() / 2), self.pixmap) else: painter.drawPixmap(-int(halfW), -int(halfH), self.pixmap) # 如果在加载 if self.loadingTimer.isActive(): diameter = 2 * self.pradius painter.setBrush( QColor(45, 140, 240, (1 - self.pradius / 10) * 255)) painter.setPen(Qt.NoPen) painter.drawRoundedRect( QRectF(-self.pradius, -self.pradius, diameter, diameter), self.pradius, self.pradius)
def paintEvent(self, event): p = QPainter(self) p.setRenderHint(QPainter.Antialiasing, True) p.save() side = self.height() p.scale(side / 100.0, side / 100.0) width = 100 * self.width() height = 100 * self.height() width = 100.0 * self.width() / self.height() height = 100.0 pen = QPen(p.pen()) pen.setColor(QColor(32, 32, 32)) pen.setWidthF(6.0) p.setPen(pen) p.setBrush(Qt.black) p.drawRoundedRect(3, 3, width - 6, height - 6, 7, (7 * width) / height) w = (width - 2 * self.Y_OFFSET) / self.m_digits x = (self.m_digits - 1) * w h = height - 2 * self.Y_OFFSET c = self.m_value r = 0 for i in range(self.m_digits): r = c % 10 c = c // 10 rect = QRectF(x + self.X_OFFSET, self.Y_OFFSET, w, h) self.m_svg.render(p, "d{}".format(r), rect) x -= w p.restore()
def paintEvent(self, event): painter = QPainter(self) pixmap = None if self.status == STATUS_NORMAL: pixmap = self.normalPix elif self.status == STATUS_HOVER: pixmap = self.hoverPix elif self.status == STATUS_PRESS: pixmap = self.pressPix if not pixmap: return if not self._enable: if self.disablePix: painter.drawPixmap(0, 0, self.disablePix) else: image = pixmap.toImage() grayImg = convertToGray(image) painter.drawImage(0, 0, grayImg) elif self.autoRenderMask and self.status != STATUS_NORMAL: if self.status == STATUS_PRESS: painter.drawPixmap(1, 1, pixmap) else: painter.drawPixmap(0, 0, pixmap) painter.setPen(Qt.NoPen) painter.setBrush(QBrush(QColor(250, 250, 250, 100))) painter.drawRoundedRect(self.rect(), 2, 2) else: painter.drawPixmap(0, 0, pixmap)
def paintEvent(self, event): label = self.switch_label_1 if self.isChecked( ) else self.switch_label_2 if self.isChecked(): bg_color = QColor(self.switch_color_1) else: bg_color = QColor(self.switch_color_2) radius = 10 width = self.width center = self.rect().center() painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing) painter.translate(center) painter.setBrush(QColor(0, 0, 0)) pen = QPen(Qt.black) pen.setWidth(2) painter.setPen(pen) painter.drawRoundedRect(QRect(-width, -radius, 2 * width, 2 * radius), radius, radius) painter.setBrush(QBrush(bg_color)) sw_rect = QRect(-radius, -radius, width + radius, 2 * radius) if not self.isChecked(): sw_rect.moveLeft(-width) painter.drawRoundedRect(sw_rect, radius, radius) painter.setFont(QFont("Arial", self.font_size, QFont.Bold)) painter.drawText(sw_rect, Qt.AlignCenter, label)
def paintEvent(self, event): qp = QPainter() qp.begin(self) qp.setPen(Qt.NoPen) qp.setBrush(self.brushes[1024]) qp.drawRoundedRect(self.resetRect,5,5) qp.setPen(QColor(0xf9f6f2)) qp.setFont(QFont("Thoma",26)) qp.drawText(self.resetRect, "Reset", QTextOption(Qt.AlignHCenter|Qt.AlignVCenter)) qp.setPen(QColor(0x776e65)) qp.setFont(QFont("Thoma",13)) qp.drawText(self.descriptionRect,"Join the numbers og get to the 2048 title!", QTextOption(Qt.AlignHCenter|Qt.AlignVCenter)) for i in range(4): for j in range(4): rect=QRectF(10+j*100, 110+i*100, 80, 80) qp.setPen(Qt.NoPen) #qp.setBrush(QColor(255,80,0,160)) qp.setBrush(self.brushes[self.player1.a[i,j]]) qp.drawRoundedRect(rect, 5, 5) if self.player1.a[i,j] < 16: qp.setPen(QColor(0x776e65)) else: qp.setPen(QColor(0xf9f6f2)) if self.player1.a[i,j] > 512: qp.setFont(QFont("Tahoma",30)) elif self.player1.a[i,j] > 64: qp.setFont(QFont("Tahoma",40)) else: qp.setFont(QFont("Tahoma",50)) if self.player1.a[i,j] != 0: qp.drawText(rect, str(self.player1.a[i,j]), QTextOption(Qt.AlignHCenter|Qt.AlignVCenter)) qp.end()
def paintEvent(self, event): label = self.text_true if self.isChecked() else self.text_false bg_color = Qt.darkGreen if self.isChecked() else Qt.red radius = 10 width = 32 center = self.rect().center() painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing) painter.translate(center) painter.setBrush(QColor(0, 0, 0)) pen = QPen(Qt.black) pen.setWidth(2) painter.setPen(pen) painter.drawRoundedRect(QRect(-width, -radius, 2 * width, 2 * radius), radius, radius) painter.setBrush(QBrush(bg_color)) sw_rect = QRect(-radius, -radius, width + radius, 2 * radius) if not self.isChecked(): sw_rect.moveLeft(-width) painter.drawRoundedRect(sw_rect, radius, radius) painter.setPen(QPen(self.text_color)) font = painter.font() font.setPixelSize(math.ceil(1.8 * radius)) painter.setFont(font) painter.drawText(sw_rect, Qt.AlignCenter, label)
def bullet(size=16, color=QColor(255, 255, 255), shape='square', scaleShape=1.0): """Draw a bullet and return it as a QPixmap Given `size` define size of pixmap (width=height) Given `color` define color bullet Given `shape` define bullet shape ('circle' or 'square') Given `scaleShape` define size of bullet in pixmap (1.0 = 100% / 0.5=50% for example) """ pixmap = QPixmap(size, size) pixmap.fill(Qt.transparent) canvas = QPainter() canvas.begin(pixmap) canvas.setPen(Qt.NoPen) shapeWidth = size * scaleShape offset = (size - shapeWidth) / 2 if shape == 'square': canvas.fillRect(offset, offset, shapeWidth, shapeWidth, color) elif shape == 'roundSquare': canvas.setBrush(color) canvas.drawRoundedRect(QRect(offset, offset, shapeWidth, shapeWidth), 25, 25, Qt.RelativeSize) elif shape == 'circle': canvas.setBrush(color) canvas.drawEllipse(offset, offset, shapeWidth, shapeWidth) else: raise EInvalidValue("Given `shape` value is not valid") canvas.end() return pixmap
def get_frame_with_color_info(color: QColor, size=SIZE, rounded=True, as_bytes=False) -> Union[QImage, bytes]: image = QImage(size, size, QImage.Format_ARGB32) image.fill(Qt.transparent) painter = QPainter(image) painter.setRenderHint(QPainter.HighQualityAntialiasing) painter.setPen(Qt.NoPen) painter.setBrush(color) if rounded: painter.drawRoundedRect(0, 0, image.width(), image.height(), RADIUS, RADIUS, Qt.RelativeSize) else: painter.drawRect(0, 0, image.width(), image.height()) draw_hex(painter, size, color) draw_rgb(painter, size, color) painter.end() if as_bytes: ba = QByteArray() buff = QBuffer(ba) buff.open(QIODevice.WriteOnly) image.save(buff, "PNG") return ba.data() return image
def paintEvent(self, event): # 调用父类的绘图事件 super(Toast, self).paintEvent(event) try: self.raise_() height = self.get_font_size() # 编码为二进制并计算长度,不然中英文会导致长度不一或者错误 width = len(self._text.encode('utf-8', "ignore")) * height * 0.8 if height < self._min_height: height = self._min_height else: height = self._min_height * 2 if width < self._min_width: width = self._min_width self.resize(width, height) if self._x_pos != 0 and self._y_pos != 0: self.move(self._x_pos - width / 2, self._y_pos - height / 2) painter = QPainter(self) # 设置渲染提示——反锯齿 painter.setRenderHints(QPainter.Antialiasing | QPainter.TextAntialiasing) rectangle = QRectF(0, 0, width, height) brush = QBrush(QColor(self._background_color), Qt.SolidPattern) painter.setBrush(brush) painter.setPen(QPen(QColor(self._background_color))) # 为替换矩形的每个角而绘制的四分之一椭圆的 x/y 半径。 painter.drawRoundedRect(rectangle, height / 2, height / 2, Qt.AbsoluteSize) self._draw_text(painter, rectangle, self._text) except Exception as e: logging.error(e)
def on_draw(self, event): # Setup drawing object painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing) painter.setPen(Qt.NoPen) painter.setBrush(QBrush(CONSTANTS['panel_color_light'], Qt.SolidPattern)) # Draw rounded rectangle painter.drawRoundedRect(self.rect(), *(POST_ROUNDNESS,)*2)
def createRoundButtonBackground(self, transform): scaledRect = transform.mapRect(QRect(0, 0, self.logicalSize.width(), self.logicalSize.height())) image = QImage(scaledRect.width(), scaledRect.height(), QImage.Format_ARGB32_Premultiplied) image.fill(QColor(0, 0, 0, 0).rgba()) painter = QPainter(image) painter.setRenderHint(QPainter.SmoothPixmapTransform) painter.setRenderHint(QPainter.Antialiasing) painter.setPen(Qt.NoPen) if Colors.useEightBitPalette: painter.setPen(QColor(120, 120, 120)) if self.pressed: painter.setBrush(QColor(60, 60, 60)) elif self.highlighted: painter.setBrush(QColor(100, 100, 100)) else: painter.setBrush(QColor(80, 80, 80)) else: outlinebrush = QLinearGradient(0, 0, 0, scaledRect.height()) brush = QLinearGradient(0, 0, 0, scaledRect.height()) brush.setSpread(QLinearGradient.PadSpread) highlight = QColor(255, 255, 255, 70) shadow = QColor(0, 0, 0, 70) sunken = QColor(220, 220, 220, 30) if self.type == TextButton.PANEL: normal1 = QColor(200, 170, 160, 50) normal2 = QColor(50, 10, 0, 50) else: normal1 = QColor(255, 255, 245, 60) normal2 = QColor(255, 255, 235, 10) if self.pressed: outlinebrush.setColorAt(0, shadow) outlinebrush.setColorAt(1, highlight) brush.setColorAt(0, sunken) painter.setPen(Qt.NoPen) else: outlinebrush.setColorAt(1, shadow) outlinebrush.setColorAt(0, highlight) brush.setColorAt(0, normal1) if not self.highlighted: brush.setColorAt(1, normal2) painter.setPen(QPen(outlinebrush, 1)) painter.setBrush(brush) if self.type == TextButton.PANEL: painter.drawRect(0, 0, scaledRect.width(), scaledRect.height()) else: painter.drawRoundedRect(0, 0, scaledRect.width(), scaledRect.height(), 10, 90, Qt.RelativeSize) return image
def setRoundMask(self): bmp = QPixmap(self.size()) bmp.fill(Qt.white) p = QPainter(bmp) p.setRenderHint(QPainter.Antialiasing) p.setBrush(QBrush(Qt.white)) p.setCompositionMode(QPainter.CompositionMode_Clear) p.drawRoundedRect(0, 0, self.width(), self.height(), 3, 3) p.end() self.setMask(QRegion(QBitmap(bmp)))
def paintEvent(self, event): painter = QPainter(self) if self.border: size = self.size() painter.setPen(Colors.eyegrade_blue) painter.drawRoundedRect(0, 0, size.width() - 2, size.height() - 2, 10, 10) painter.drawImage(5, 5, self.image) else: painter.drawImage(event.rect(), self.image)
def paintEvent(self, event): painter = QPainter(self) w = self.width() h = self.height() rect = QRect(self.shadowMargin, self.shadowMargin, w - 2 * self.shadowMargin, h - 2 * self.shadowMargin) painter.setPen(Qt.NoPen) painter.setBrush(self.palette().window()) painter.drawRoundedRect(rect, self.borderRadius, self.borderRadius) self._drawGradientShadow(painter, w, h)
def paintEvent(self, event): color = self.state_colors[self.state] painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing, True) painter.setCompositionMode(QPainter.CompositionMode_SourceOver) gradient = QLinearGradient(0, 0, self.width(), 0) gradient.setColorAt(0.0, Qt.transparent) gradient.setColorAt(1.0, color) painter.setBrush(QBrush(gradient)) gradient.setColorAt(1.0, color.stroke) painter.setPen(QPen(QBrush(gradient), 1)) painter.drawRoundedRect(-4, 0, self.width()+4, self.height(), 3.7, 3.7)
def paintEvent(self, ev): color = self._color if not color or color.alpha() == 0: return painter = QPainter(self) adj = self.lineWidth // 2 rect = self.rect().adjusted(adj, adj, -adj, -adj) pen = QPen(color) pen.setWidth(self.lineWidth) painter.setPen(pen) painter.setRenderHint(QPainter.Antialiasing, True) painter.drawRoundedRect(rect, self.radius, self.radius)
def _dialog_paintEvent(self, d, event): QDialog.paintEvent(d, event) pen = QPen() pen.setWidth(2) pen.setColor(QColor(200, 200, 200)) rect = d.rect() rect = rect.adjusted(0, 0, -1, -1) painter = QPainter(d) painter.setRenderHint(QPainter.Antialiasing, True) painter.setPen(pen) painter.setOpacity(0.8) painter.setBrush(QBrush(QColor(Qt.white))) painter.drawRoundedRect(rect, 15, 15)
def _rounded_qimage(qimg, radius): r_image = QImage(qimg.width(), qimg.height(), QImage.Format_ARGB32) r_image.fill(Qt.transparent) p = QPainter() pen = QPen(Qt.darkGray) pen.setJoinStyle(Qt.RoundJoin) p.begin(r_image) p.setRenderHint(p.Antialiasing) p.setPen(Qt.NoPen) p.setBrush(QBrush(qimg)) p.drawRoundedRect(0, 0, r_image.width(), r_image.height(), radius, radius) p.end() return r_image
def image(cls, **kwargs): """ Returns an image suitable for the palette. :rtype: QPixmap """ # INITIALIZATION pixmap = QPixmap(kwargs['w'], kwargs['h']) pixmap.fill(Qt.transparent) painter = QPainter(pixmap) # ITEM SHAPE rect = cls.createPolygon(50, 30) painter.setRenderHint(QPainter.Antialiasing) painter.setPen(QPen(QColor(0, 0, 0), 1.0, Qt.SolidLine, Qt.SquareCap, Qt.RoundJoin)) painter.setBrush(QColor(252, 252, 252)) painter.translate(kwargs['w'] / 2, kwargs['h'] / 2) painter.drawRoundedRect(rect, 14, 14) return pixmap
def paintEvent(self, event): QWidget.paintEvent(self, event) pen = QPen() pen.setWidth(2) pen.setColor(QColor(200, 200, 200)) rect = self.rect() rect = rect.adjusted(0, 0, -1, -1) painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing, True) painter.setPen(pen) painter.setOpacity(0.5) painter.setBrush(QBrush(QColor(Qt.white))) painter.drawRoundedRect(rect, 15, 15) painter.setOpacity(1) pen.setColor(Qt.black) painter.setPen(pen) text = self.name + "\n" + self.description painter.drawText(self.rect(), Qt.AlignHCenter | Qt.AlignVCenter, text)
def image(cls, **kwargs): """ Returns an image suitable for the palette. :rtype: QPixmap """ # INITIALIZATION pixmap = QPixmap(kwargs['w'], kwargs['h']) pixmap.fill(Qt.transparent) painter = QPainter(pixmap) rect = cls.createPolygon(54, 34) # ITEM SHAPE painter.setRenderHint(QPainter.Antialiasing) painter.setPen(QPen(QColor(0, 0, 0), 1.0, Qt.SolidLine, Qt.SquareCap, Qt.RoundJoin)) painter.setBrush(QColor(252, 252, 252)) painter.translate(kwargs['w'] / 2, kwargs['h'] / 2) painter.drawRoundedRect(rect, 6, 6) # TEXT WITHIN THE SHAPE painter.setFont(Font('Arial', 10, Font.Light)) painter.drawText(rect, Qt.AlignCenter, 'xsd:string') return pixmap
def paintEvent(self, event): """Paint transparent background,animated pattern,background text.""" painter, font = QPainter(self), self.font() painter.fillRect(event.rect(), Qt.transparent) # fill transparent rect painter.setPen(QPen(QColor(randint(9, 255), randint(9, 255), 255))) painter.rotate(30) # Rotate painter ~30 Degree font.setBold(True) # Set painter Font for text font.setPixelSize(100) painter.setFont(font) painter.drawText(99, 99, "Python Qt") # draw the background text painter.rotate(-30) # Rotate -30 the QPen back painter.setPen(Qt.NoPen) # set the pen to no pen painter.setBrush(QColor("black")) # Background Color painter.setOpacity(0.9) # Background Opacity painter.drawRoundedRect(self.rect(), 25, 25) # Back Rounded Borders for i in range(2048): # animated random dots background pattern x = randint(10, self.size().width() - 10) y = randint(10, self.size().height() - 10) painter.setPen(QPen(QColor(randint(9, 255), randint(9, 255), 255))) painter.drawPoint(x, y) QMainWindow.paintEvent(self, event)
def generateTheme(themeDatas, screenRect): # Window Background px = QPixmap(screenRect.size()) px.fill(QColor(themeDatas["Background/Color"])) painter = QPainter(px) if themeDatas["Background/ImageFile"]: path = findBackground(themeDatas["Background/ImageFile"]) _type = themeDatas["Background/Type"] if path and _type > 0: if _type == 1: # Tiled painter.fillRect(screenRect, QBrush(QImage(path))) else: img = QImage(path) scaled = img.size() if _type == 3: # Stretched scaled.scale(screenRect.size(), Qt.IgnoreAspectRatio) elif _type == 4: # Scaled scaled.scale(screenRect.size(), Qt.KeepAspectRatio) elif _type == 5: # Zoomed scaled.scale(screenRect.size(), Qt.KeepAspectRatioByExpanding) painter.drawImage((screenRect.width() - scaled.width()) / 2, (screenRect.height() - scaled.height()) / 2, img.scaled(scaled)) # Text Background textRect = themeTextRect(themeDatas, screenRect) painter.save() color = QColor(themeDatas["Foreground/Color"]) color.setAlpha(themeDatas["Foreground/Opacity"] * 255 / 100) painter.setBrush(color) painter.setPen(Qt.NoPen) r = themeDatas["Foreground/Rounding"] painter.drawRoundedRect(textRect, r, r) painter.restore() painter.end() return px
def paintEvent(self, event): painter = QPainter(self) if self.fUseCustomPaint: painter.setBrush(self.fViewBg) painter.setPen(QColor(12, 12, 12)) painter.drawRect(0, 0, self.width(), self.height()-2) painter.setBrush(QColor(36, 36, 36)) painter.setPen(QColor(62, 62, 62)) painter.drawRect(1, 1, self.width()-2, self.height()-4) painter.setBrush(self.fViewBg) painter.setPen(self.fViewBg) painter.drawRect(2, 3, self.width()-5, self.height()-7) else: painter.setBrush(self.fViewBg) painter.setPen(self.fViewBg) painter.drawRoundedRect(2, 2, self.width()-6, self.height()-6, 3, 3) self.fScene.render(painter, self.fRenderSource, self.fRenderTarget, Qt.KeepAspectRatio) maxWidth = self.fViewRect[iWidth] / self.fScale maxHeight = self.fViewRect[iHeight] / self.fScale if maxWidth > self.fFakeWidth: maxWidth = self.fFakeWidth if maxHeight > self.fFakeHeight: maxHeight = self.fFakeHeight painter.setBrush(self.fViewBrush) painter.setPen(self.fViewPen) painter.drawRect(self.fViewRect[iX], self.fViewRect[iY], maxWidth, maxHeight) if self.fUseCustomPaint: event.accept() else: QFrame.paintEvent(self, event)
class RoundedPushButton(QPushButton): def __init__(self,parent, text=''): QPushButton.__init__(self, parent) self.text=text self.backgroundColor = QPalette().light().color() self.backgroundColor.setRgb(157,157,157) #(220,203,231) #self.backgroundColor.setAlpha(0) self.brush=QBrush(Qt.SolidPattern) def paintEvent(self,event): self.brush.setColor(self.backgroundColor) self.painter=QPainter(self) self.painter.setRenderHint(QPainter.Antialiasing) self.painter.setPen(Qt.NoPen) self.painter.setBrush(self.brush) self.painter.drawRoundedRect(QRect(0,0,self.width(),self.height()), self.width()/10, self.height()/10) self.painter.end() self.painter3=QPainter(self) self.painter3.drawText(1,0,self.width()-2,self.height(),Qt.AlignCenter,self.text) self.painter3.end()
def paintInfoColumn(self, painter, option, index, width_limit = 0): left = option.rect.left() + 3 top = option.rect.top() width = option.rect.width() - width_limit pixmap = QPixmap(option.rect.size()) pixmap.fill(Qt.transparent) p = QPainter(pixmap) p.setRenderHint(QPainter.Antialiasing, True) p.translate(-option.rect.topLeft()) textInner = 2 * ICON_PADDING + ROW_HEIGHT - 10 itemHeight = ROW_HEIGHT + 2 * ICON_PADDING margin = left + ICON_PADDING - 10 title = QVariant.value(index.model().data(index, NameRole)) summary = QVariant.value(index.model().data(index, SummaryRole)) ptype = QVariant.value(index.model().data(index, TypeRole)) rate = int(QVariant.value(index.model().data(index, RateRole))) if QVariant.value(index.model().data(index, RateRole))!= None else 0 installed = True if QVariant.value(index.model().data(index, InstalledRole))=="True" else False # We need to request update if its not possible to get meta data about the package try: # Get Package Icon if exists _icon = QVariant.value(index.model().data(index, Qt.DecorationRole)) except: p.end() painter.drawPixmap(option.rect.topLeft(), pixmap) self.parent.requestUpdate() return icon = None if _icon: overlay = [CHECK_ICON] if installed else [] KIconLoader._forceCache = True pix = KIconLoader.loadOverlayed(_icon, overlay, 32) if not pix.isNull(): icon = QIcon(pix.scaled(QSize(32, 32), Qt.KeepAspectRatio, Qt.SmoothTransformation)) KIconLoader._forceCache = False if not icon: icon = self.defaultIcon if not installed else self.defaultInstalledIcon # Paint the Icon icon.paint(p, margin, top + ICON_PADDING, ROW_HEIGHT, ROW_HEIGHT, Qt.AlignCenter) fix_pos = 0 if index.model().columnCount() <= 1: fix_pos = 22 if config.USE_APPINFO: # Rating Stars for _rt_i in range(5): self._rt_0.paint(p, width + 10 * _rt_i - 30 - fix_pos, top + ROW_HEIGHT / 4, 10, 10, Qt.AlignCenter) for _rt_i in range(rate): self._rt_1.paint(p, width + 10 * _rt_i - 30 - fix_pos, top + ROW_HEIGHT / 4, 10, 10, Qt.AlignCenter) foregroundColor = option.palette.color(QPalette.Text) p.setPen(foregroundColor) # Package Name p.setFont(self.boldFont) p.drawText(left + textInner, top, width - textInner, itemHeight / 2,Qt.AlignBottom | Qt.AlignLeft, title) # tagWidth = 0 _component_width = 0 if self.parent.showComponents: component = str(QVariant.value(index.model().data(index, ComponentRole))) widthOfTitle = self.boldFontFM.width(title) + 6 + left + textInner p.setFont(self.tagFont) rect = self.tagFontFM.boundingRect(option.rect, Qt.TextWordWrap, component) p.setPen(LIGHTGREEN) p.setBrush(LIGHTGREEN) p.drawRoundedRect(widthOfTitle , top + 12, rect.width() + 4, rect.height(), 10, 10) p.setPen(DARKGREEN) p.drawText(widthOfTitle + 2, top + 12, rect.width(), rect.height(), Qt.AlignCenter, component) p.setPen(foregroundColor) _component_width = rect.width() + 8 if self.parent.showIsA: isa = str(QVariant.value(index.model().data(index, IsaRole))) if not isa == '': widthOfTitle = self.boldFontFM.width(title) + 6 + left + textInner + _component_width p.setFont(self.tagFont) rect = self.tagFontFM.boundingRect(option.rect, Qt.TextWordWrap, isa) p.setPen(LIGHTBLUE) p.setBrush(LIGHTBLUE) p.drawRoundedRect(widthOfTitle , top + 12, rect.width() + 4, rect.height(), 10, 10) p.setPen(DARKVIOLET) p.drawText(widthOfTitle + 2, top + 12, rect.width(), rect.height(), Qt.AlignCenter, isa) p.setPen(foregroundColor) _component_width += rect.width() + 8 if ptype not in ('None', 'normal'): widthOfTitle = self.boldFontFM.width(title) + 6 + left + textInner + _component_width p.setFont(self.tagFont) rect = self.tagFontFM.boundingRect(option.rect, Qt.TextWordWrap, self.types[ptype][1]) p.setPen(self.types[ptype][0]) p.setBrush(self.types[ptype][0]) p.drawRoundedRect(widthOfTitle, top + 12, rect.width() + 4, rect.height(), 10, 10) p.setPen(WHITE) p.drawText(widthOfTitle + 2, top + 12, rect.width(), rect.height(), Qt.AlignCenter, self.types[ptype][1]) p.setPen(foregroundColor) tagWidth = rect.width() # Package Summary p.setFont(self.normalFont) foregroundColor.setAlpha(160) p.setPen(foregroundColor) elided_summary = self.normalFontFM.elidedText(summary, Qt.ElideRight, width - textInner - tagWidth - 22) p.drawText(left + textInner, top + itemHeight / 2, width - textInner, itemHeight / 2, Qt.TextDontClip, elided_summary) foregroundColor.setAlpha(255) p.setPen(foregroundColor) buttonStyle = None if self.rowAnimator.currentRow() == index.row(): description = str(QVariant.value(index.model().data(index, DescriptionRole))) size = str(QVariant.value(index.model().data(index, SizeRole))) homepage = str(QVariant.value(index.model().data(index, HomepageRole))) installedVersion = str(QVariant.value(index.model().data(index, InstalledVersionRole))) version = str(QVariant.value(index.model().data(index, VersionRole))) # Package Detail Label position = top + ROW_HEIGHT p.setFont(self.normalDetailFont) baseRect = QRect(left, position, width - 8, option.rect.height()) rect = self.normalDetailFontFM.boundingRect(baseRect, Qt.TextWordWrap | Qt.TextDontClip, description) p.drawText(left + 2, position, width - 8, rect.height(), Qt.TextWordWrap | Qt.TextDontClip, description) # Package Detail Homepage position += rect.height() + 4 p.setFont(self.boldDetailFont) p.drawText(left + ICON_SIZE , position, width - textInner, itemHeight / 2, Qt.AlignLeft, self._titles['website']) p.setFont(self.normalDetailFont) homepage = self.normalDetailFontFM.elidedText(homepage, Qt.ElideRight, width - self._titleFM['website']) rect = self.normalDetailFontFM.boundingRect(option.rect, Qt.TextSingleLine, homepage) self.rowAnimator.hoverLinkFilter.link_rect = QRect(left + self._titleFM['website'] + 2, position + 2 + 32, rect.width(), rect.height()) p.setPen(option.palette.color(QPalette.Link)) p.drawText(left + self._titleFM['website'], position, width, rect.height(), Qt.TextSingleLine, homepage) p.setPen(foregroundColor) # Package Detail Version position += rect.height() p.setFont(self.boldDetailFont) p.drawText(left + ICON_SIZE , position, width - textInner, itemHeight / 2, Qt.AlignLeft, self._titles['release']) p.setFont(self.normalDetailFont) rect = self.normalDetailFontFM.boundingRect(option.rect, Qt.TextWordWrap, version) p.drawText(left + self._titleFM['release'], position, width, rect.height(), Qt.TextWordWrap, version) if not installedVersion == '' or not installedVersion == None: position += rect.height() p.setFont(self.boldDetailFont) p.drawText(left + ICON_SIZE , position, width - textInner, itemHeight / 2, Qt.AlignLeft, self._titles['installVers']) p.setFont(self.normalDetailFont) rect = self.normalDetailFontFM.boundingRect(option.rect, Qt.TextWordWrap, installedVersion) p.drawText(left + self._titleFM['installVers'], position, width, rect.height(), Qt.TextWordWrap, installedVersion) # Package Detail Repository repository = QVariant.value(index.model().data(index, RepositoryRole)) if not repository == '': repository = _translate("Packaga Manager",'Unknown') if repository == 'N/A' else repository position += rect.height() p.setFont(self.boldDetailFont) p.drawText(left + ICON_SIZE , position, width - textInner, itemHeight / 2, Qt.AlignLeft, self._titles['repository']) p.setFont(self.normalDetailFont) p.drawText(left + self._titleFM['repository'], position, width, itemHeight / 2, Qt.TextWordWrap, repository) # Package Detail Size position += rect.height() p.setFont(self.boldDetailFont) p.drawText(left + ICON_SIZE , position, width - textInner, itemHeight / 2, Qt.AlignLeft, self._titles['size']) p.setFont(self.normalDetailFont) p.drawText(left + self._titleFM['size'], position, width, itemHeight / 2, Qt.TextWordWrap, size) position += rect.height() self.rowAnimator.max_height = position - top + 8 # Package More info button opt = QStyleOptionViewItem(option) buttonStyle = QStyleOptionButton() if option.state & QStyle.State_MouseOver or option.state & QStyle.State_HasFocus: buttonStyle.state |= QStyle.State_HasFocus buttonStyle.state |= QStyle.State_Enabled buttonStyle.text = _translate("Packaga Manager","Details") buttonStyle.rect = QRect(width - 100, position - 22, 100, 22) p.end() # FIXME # if option.state & QStyle.State_HasFocus and self.animatable: # option.state |= QStyle.State_MouseOver # Use Plastique style to draw focus rect like MouseOver effect of Oxygen. # self.plastik.drawPrimitive(QStyle.PE_FrameLineEdit, option, painter, None) if not self.rowAnimator.running() and buttonStyle: if self.show_details_button and (installed or config.USE_APPINFO): PackageDelegate.AppStyle().drawControl(QStyle.CE_PushButton, buttonStyle, painter, None) self.rowAnimator.hoverLinkFilter.button_rect = QRect(buttonStyle.rect) painter.drawPixmap(option.rect.topLeft(), pixmap) del pixmap
def paintEvent(self, event): painter=QPainter(self) #设置渲染:开启抗锯齿,老机器很占cpu! painter.setRenderHint(QPainter.Antialiasing) #第一次使用,就使用一次,用来检测打开播放器时,读取上次关闭时的记录 ==> if self.homeAction.playObj.bufferStatus()==100 and self.homeAction.isInitPlay:#判断载入歌曲是否100% ,并且是第一打开播放器 self.homeAction.isInitPlay=0 self.homeAction.playObj.setPosition(self.homeAction.pastTime) if self.homeAction.playStat=="False": self.homeAction.playObj.pause() #第一次使用,用来检测打开播放器时,读取上次关闭时的记录<<== #当前歌曲信息及播放完毕后的事件==>> #当前歌曲(总长) totalDuration = int(self.homeAction.playObj.duration()) #当前歌曲(已播放时间) pastTime = int(self.homeAction.playObj.position()) #当前歌曲(剩余时长) laveTime = totalDuration - pastTime # if pastTime>=totalDuration: if self.homeAction.playObj.mediaStatus()==7: #print("zhe::::") if self.homeAction.isLoop==1:#是否单循环 self.homeAction.playObj.setPosition(0) self.homeAction.playObj.play() else: self.homeAction.nextPlay() self.tracksList.setCurrentRow(self.homeAction.soundID) #当前歌曲信息及播放完毕后的事件结束<<== #记录播放信息==>> colors.CONFIGFILE.set("Save","soundID",str(self.homeAction.soundID)) if self.homeAction.playObj.state()==1: playStat="True" else: playStat="False" colors.CONFIGFILE.set("Save","playStat",playStat) colors.CONFIGFILE.set("Save","pastTime",str(pastTime)) colors.CONFIGFILE.set("Save","volume",str(self.homeAction.currentVolume)) colors.CONFIGFILE.set("Save","isRandom",str(self.homeAction.isRandom)) colors.CONFIGFILE.set("Save","isLoop",str(self.homeAction.isLoop)) colors.CONFIGFILE.write(open('config.ini', "w")) #记录播放信息结束<<== #播放轨道条==>> painter.setPen(QPen(Qt.NoPen))#设置样式 painter.setBrush(QColor(230,230,219,120))#设置颜色 #画播放轨道背景 painter.drawRoundedRect(QRectF(40,257,450,42),5.0, 5.0) #画播放轨道(未播放状态) painter.setPen(QPen(Qt.white,0.1)) painter.setBrush(Qt.NoBrush) painter.drawRect(QRectF(50,272,410,10)) #画播放轨道(计算并画已播放状态) painter.setPen(QPen(Qt.NoPen)) painter.setBrush(QColor(0,173,239,255)) self.section = 408*10 / (totalDuration*10) past = pastTime* self.section currentPosition = past if currentPosition > 408: currentPosition=408 #画出已播放状态) painter.drawRect(QRectF(51,273,currentPosition,8)) #播放轨道条结束<<=== #播放轨道条右侧的播放/暂停的小图标,小三角或两竖<<=== if self.homeAction.playObj.state()==1: #画播放状态标(三角形) points = [QPointF(476.0, 277.0),QPointF(468.0, 273.0),QPointF(468.0, 281.0)] painter.drawPolygon(QPolygonF(points))#三角形 else: #画暂停状态标(两竖) painter.drawRect(QRectF(468,273,3,8))#暂停第一竖 painter.drawRect(QRectF(473,273,3,8))#暂停第二竖 #播放轨道条右侧的播放/暂停的小图标,小三角或两竖结束<<=== #画轨道条上面的照片背景==> painter.setBrush(Qt.white) painter.setPen(QPen(QColor(176,178,177,255),1)) painter.drawRect(QRect(270,105,160,160)) painter.drawImage(QRectF(275,110,150,150), QImage("%simg/music/nonePhoto.png" % (colors.SYSPATH)), QRectF(0.0, 0.0, 150.0, 150.0))#测试照片 if self.homeAction.currentImg!="": photos = QImage() photos.loadFromData(self.homeAction.currentImg, "JPG") newImg = photos.scaled(150,150) painter.drawImage(QRectF(275,110,150,150),newImg, QRectF(0.0, 0.0, 150.0, 150.0))#测试照片 #画轨道条上面的照片背景END<<== #添加艺术家图标和歌曲标题图标==> painter.drawImage(QRectF(40,150,20,20), QImage("%simg/music/icon.png" % (colors.SYSPATH)), QRectF(0.0, 0.0, 20.0, 20.0))#艺术家 painter.drawImage(QRectF(40,175,20,20), QImage("%simg/music/icon.png" % (colors.SYSPATH)), QRectF(0.0, 20.0, 20.0, 20.0))#歌曲标题一 painter.drawImage(QRectF(40,200,20,20), QImage("%simg/music/icon.png" % (colors.SYSPATH)), QRectF(0.0, 40.0, 20.0, 20.0))#歌曲标题二 painter.drawImage(QRectF(40,225,20,20), QImage("%simg/music/icon.png" % (colors.SYSPATH)), QRectF(0.0, 60.0, 20.0, 20.0))#时间进度 #添加艺术家图标和歌曲标题图标END<<== #当前播放歌曲的信息==>> #<--剩余时间 painter.setFont(QFont("Verdana",8)) painter.setPen(QColor(0,173,239,255)) painter.drawText(QPointF(425,281),str(time.strftime("%M:%S", time.localtime(laveTime/1000))))#剩余时间 #剩余时间--> painter.setFont(QFont("Verdana",12)) painter.drawText(QPointF(70,243),str(time.strftime("%M:%S", time.localtime(totalDuration/1000))) + " /")#总时长 painter.drawText(QPointF(135,243),str(time.strftime("%M:%S", time.localtime(pastTime/1000))))#已播放时间 painter.drawText(QPointF(110,217),"%d/%d" %(self.homeAction.soundID,len(self.homeAction.randomList)-1))#曲目 x/x painter.setFont(QFont("微软雅黑",12)) painter.drawText(QPointF(70,166),self.homeAction.playObj.metaData(QMediaMetaData.Author))#艺术家 painter.drawText(QPointF(70,190),self.homeAction.playObj.metaData(QMediaMetaData.Title))#曲目名 painter.drawText(QPointF(70,216),"曲目")#曲目 #当前播放歌曲的信息END<<== #画试听、随机、循环按钮背景==>> painter.setPen(Qt.NoPen) painter.setBrush(QColor(70,72,76,220)) painter.drawRect(QRect(531,1,75,39))#循环 painter.drawRect(QRect(607,1,75,39))#随机 painter.drawRect(QRect(683,1,74,39))#预览 painter.drawRect(QRect(531,334,75,39))#清空列表 painter.drawRect(QRect(607,334,75,39))#增加文件夹 painter.drawRect(QRect(683,334,74,39))#增加文件 #画试听、随机、循环按钮背景END<<== #按扭文字 循环 随机 预览 清空列表 增加文件夹 增加文件 ==>> painter.setPen(Qt.white) painter.setFont(QFont("微软雅黑",10)) painter.drawText(QPointF(715,25),"循环")#循环 painter.drawText(QPointF(640,25),"随机")#随机 painter.drawText(QPointF(565,25),"预览")#预览 painter.drawText(QPointF(715,358),"打开")#循环 painter.drawText(QPointF(640,358),"添加")#随机 painter.drawText(QPointF(565,358),"清空")#随机 #按扭文字 循环 随机 预览 清空列表 增加文件夹 增加文件 END<<== #歌词==> painter.setFont(QFont("微软雅黑",20)) #print(self.homeAction.songText) for key,v in enumerate(self.homeAction.songTextKey): if int(v) > int(pastTime/1000): strKey = self.homeAction.songTextKey[key-1] painter.drawText(QPointF(40,340),self.homeAction.songText[str(strKey)])#当前歌词 break #歌词<<== #画右侧列表背景 ==> painter.setPen(QPen(Qt.NoPen)) painter.setBrush(QColor(230,230,219,120)) painter.drawRect(QRect(531,41,226,292)) #画右侧列表背景END<<== #画右侧列表滚动条背景 ==>> painter.setBrush(QColor(71,73,76,255)) painter.drawRect(QRect(758,1,42,372)) painter.setBrush(QColor(43,46,49,255)) painter.drawRoundedRect(QRectF(770,1,18,372),20.0, 20.0) #画右侧列表滚动条背景 END<<== #列表向上 向下 按钮 ==>> painter.drawImage(QRectF(770,1,18,27), QImage("%simg/music/up.png" % (colors.SYSPATH)), QRectF(0.0, 0.0, 18.0, 27.0))#列表向上 painter.drawImage(QRectF(770,345,18,27), QImage("%simg/music/down.png" % (colors.SYSPATH)), QRectF(0.0, 0.0, 18.0, 27.0))#列表向下 #列表向上 向下 按钮 END<<== #滚动条位置(顶端:24,底端:298,可移动范围:300)===>> try: if self.tracksList.count()>5: #pp = 274*1000/self.tracksList.count() pp = 300*1000/self.tracksList.count() oo = int(self.tracksList.verticalScrollBar().value()*pp/1000)+24 if oo>298: oo=298 painter.drawImage(QRectF(770,oo,18,53), QImage("%simg/music/scroll.png" % (colors.SYSPATH)), QRectF(0.0, 0.0, 18.0, 53.0)) except : pass #滚动条位置(顶端:24,底端:298,可移动范围:274)END<<=== #画按钮的图标 循环 随机 预览 清空列表 增加文件夹 增加文件 ==>> #画试听图标 if self.homeAction.isPreview: if pastTime >10*1000: self.homeAction.nextPlay() if int(pastTime)%2 == 0: #print("偶数",int(pastTime)%2) painter.setPen(Qt.red) painter.setFont(QFont("微软雅黑",10)) painter.drawText(QPointF(565,25),"预览")#随机 painter.drawImage(QRectF(540,9.5,20,20), QImage("%simg/music/icon.png" % (colors.SYSPATH)), QRectF(40.0, 40.0, 20.0, 20.0))#画预览图标 else: painter.drawImage(QRectF(540,9.5,20,20), QImage("%simg/music/icon.png" % (colors.SYSPATH)), QRectF(20.0, 40.0, 20.0, 20.0))#画预览图标 else: painter.drawImage(QRectF(540,9.5,20,20), QImage("%simg/music/icon.png" % (colors.SYSPATH)), QRectF(20.0, 40.0, 20.0, 20.0))#画预览图标 #画随机图标 if self.homeAction.isRandom == 1: painter.drawImage(QRectF(615,9.5,20,20), QImage("%simg/music/icon.png" % (colors.SYSPATH)), QRectF(40.0, 20.0, 20.0, 20.0))#画随机图标 else: painter.drawImage(QRectF(615,9.5,20,20), QImage("%simg/music/icon.png" % (colors.SYSPATH)), QRectF(20.0, 20.0, 20.0, 20.0))#画随机图标 #画循环图标 if self.homeAction.isLoop == 1: painter.drawImage(QRectF(690,9.5,20,20), QImage("%simg/music/icon.png" % (colors.SYSPATH)), QRectF(40.0, 00.0, 20.0, 20.0))#画循环图标 else: painter.drawImage(QRectF(690,9.5,20,20), QImage("%simg/music/icon.png" % (colors.SYSPATH)), QRectF(20.0, 00.0, 20.0, 20.0))#画循环图标 #清空列表图标 painter.drawImage(QRectF(540,342,20,20), QImage("%smusic/icon.png" % (colors.SYSPATH)), QRectF(60.0, 00.0, 20.0, 20.0))#清空列表图标 painter.drawImage(QRectF(615,344,20,20), QImage("%smusic/icon.png" % (colors.SYSPATH)), QRectF(60.0, 20.0, 20.0, 20.0))#增加文件 painter.drawImage(QRectF(690,342.5,20,20), QImage("%smusic/icon.png" % (colors.SYSPATH)), QRectF(60.0, 40.0, 20.0, 20.0))#增加文件夹
def paintEvent(self, event): page_bottom = self.edit.viewport().height() font_metrics = QFontMetrics(self.edit.document().defaultFont()) current_block = self.edit.document().findBlock( self.edit.textCursor().position()) pattern = self.pat if self.edit.lang == "python" else self.patNotPython painter = QPainter(self) background = resources.CUSTOM_SCHEME.get('sidebar-background', resources.COLOR_SCHEME['sidebar-background']) foreground = resources.CUSTOM_SCHEME.get('sidebar-foreground', resources.COLOR_SCHEME['sidebar-foreground']) pep8color = resources.CUSTOM_SCHEME.get('pep8-underline', resources.COLOR_SCHEME['pep8-underline']) errorcolor = resources.CUSTOM_SCHEME.get('error-underline', resources.COLOR_SCHEME['error-underline']) migrationcolor = resources.CUSTOM_SCHEME.get('migration-underline', resources.COLOR_SCHEME['migration-underline']) painter.fillRect(self.rect(), QColor(background)) block = self.edit.firstVisibleBlock() viewport_offset = self.edit.contentOffset() line_count = block.blockNumber() painter.setFont(self.edit.document().defaultFont()) while block.isValid(): line_count += 1 # The top left position of the block in the document position = self.edit.blockBoundingGeometry(block).topLeft() + \ viewport_offset # Check if the position of the block is outside of the visible area if position.y() > page_bottom: break # Set the Painter Pen depending on special lines error = False if settings.CHECK_STYLE and \ ((line_count - 1) in self._pep8Lines): painter.setPen(QColor(pep8color)) font = painter.font() font.setItalic(True) font.setUnderline(True) painter.setFont(font) error = True elif settings.FIND_ERRORS and \ ((line_count - 1) in self._errorsLines): painter.setPen(QColor(errorcolor)) font = painter.font() font.setItalic(True) font.setUnderline(True) painter.setFont(font) error = True elif settings.SHOW_MIGRATION_TIPS and \ ((line_count - 1) in self._migrationLines): painter.setPen(QColor(migrationcolor)) font = painter.font() font.setItalic(True) font.setUnderline(True) painter.setFont(font) error = True else: painter.setPen(QColor(foreground)) # We want the line number for the selected line to be bold. bold = False if block == current_block: bold = True font = painter.font() font.setBold(True) painter.setFont(font) # Draw the line number right justified at the y position of the # line. 3 is a magic padding number. drawText(x, y, text). if block.isVisible(): painter.drawText(self.width() - self.foldArea - font_metrics.width(str(line_count)) - 3, round(position.y()) + font_metrics.ascent() + font_metrics.descent() - 1, str(line_count)) # Remove the bold style if it was set previously. if bold: font = painter.font() font.setBold(False) painter.setFont(font) if error: font = painter.font() font.setItalic(False) font.setUnderline(False) painter.setFont(font) block = block.next() self.highest_line = line_count #Code Folding xofs = self.width() - self.foldArea painter.fillRect(xofs, 0, self.foldArea, self.height(), QColor(resources.CUSTOM_SCHEME.get('fold-area', resources.COLOR_SCHEME['fold-area']))) if self.foldArea != self.rightArrowIcon.width(): polygon = QPolygonF() self.rightArrowIcon = QPixmap(self.foldArea, self.foldArea) self.rightArrowIcon.fill(Qt.transparent) self.downArrowIcon = QPixmap(self.foldArea, self.foldArea) self.downArrowIcon.fill(Qt.transparent) polygon.append(QPointF(self.foldArea * 0.4, self.foldArea * 0.25)) polygon.append(QPointF(self.foldArea * 0.4, self.foldArea * 0.75)) polygon.append(QPointF(self.foldArea * 0.8, self.foldArea * 0.5)) iconPainter = QPainter(self.rightArrowIcon) iconPainter.setRenderHint(QPainter.Antialiasing) iconPainter.setPen(Qt.NoPen) iconPainter.setBrush(QColor( resources.CUSTOM_SCHEME.get('fold-arrow', resources.COLOR_SCHEME['fold-arrow']))) iconPainter.drawPolygon(polygon) polygon.clear() polygon.append(QPointF(self.foldArea * 0.25, self.foldArea * 0.4)) polygon.append(QPointF(self.foldArea * 0.75, self.foldArea * 0.4)) polygon.append(QPointF(self.foldArea * 0.5, self.foldArea * 0.8)) iconPainter = QPainter(self.downArrowIcon) iconPainter.setRenderHint(QPainter.Antialiasing) iconPainter.setPen(Qt.NoPen) iconPainter.setBrush(QColor( resources.CUSTOM_SCHEME.get('fold-arrow', resources.COLOR_SCHEME['fold-arrow']))) iconPainter.drawPolygon(polygon) block = self.edit.firstVisibleBlock() while block.isValid(): position = self.edit.blockBoundingGeometry( block).topLeft() + viewport_offset #Check if the position of the block is outside of the visible area if position.y() > page_bottom: break if pattern.match(block.text()) and block.isVisible(): if block.blockNumber() in self._foldedBlocks: painter.drawPixmap(xofs, round(position.y()), self.rightArrowIcon) else: painter.drawPixmap(xofs, round(position.y()), self.downArrowIcon) #Add Bookmarks and Breakpoint elif block.blockNumber() in self._breakpoints: linear_gradient = QLinearGradient( xofs, round(position.y()), xofs + self.foldArea, round(position.y()) + self.foldArea) linear_gradient.setColorAt(0, QColor(255, 11, 11)) linear_gradient.setColorAt(1, QColor(147, 9, 9)) painter.setRenderHints(QPainter.Antialiasing, True) painter.setPen(Qt.NoPen) painter.setBrush(QBrush(linear_gradient)) painter.drawEllipse( xofs + 1, round(position.y()) + 6, self.foldArea - 1, self.foldArea - 1) elif block.blockNumber() in self._bookmarks: linear_gradient = QLinearGradient( xofs, round(position.y()), xofs + self.foldArea, round(position.y()) + self.foldArea) linear_gradient.setColorAt(0, QColor(13, 62, 243)) linear_gradient.setColorAt(1, QColor(5, 27, 106)) painter.setRenderHints(QPainter.Antialiasing, True) painter.setPen(Qt.NoPen) painter.setBrush(QBrush(linear_gradient)) painter.drawRoundedRect( xofs + 1, round(position.y()) + 6, self.foldArea - 2, self.foldArea - 1, 3, 3) block = block.next()# block = next(block) painter.end() super(SidebarWidget, self).paintEvent(event)
def paintEvent(self, pe): p = QPainter(self) p.setRenderHint(QPainter.Antialiasing) pen = QPen() pen.setWidth(1) pen.setColor(QColor(0x8c, 0xa3, 0xb0)) p.setPen(pen) p.setBrush(QColor(0xe4, 0xec, 0xf4)) rx = 6 space = self.space w = self.usable_width kw = self.key_w def drawRow(row, sx, sy, last_end=False): x = sx y = sy keys = row rw = w - sx i = 0 for k in keys: rect = QRectF(x, y, kw, kw) if i == len(keys) - 1 and last_end: rect.setWidth(rw) p.drawRoundedRect(rect, rx, rx) p.setPen(Qt.black) rect.adjust(5, 1, 0, 0) p.setFont(self.lowerFont) p.drawText( rect, Qt.AlignLeft | Qt.AlignBottom, self.regular_text(k)) p.setFont(self.upperFont) p.drawText( rect, Qt.AlignLeft | Qt.AlignTop, self.shift_text(k)) rw = rw - space - kw x = x + space + kw i = i + 1 p.setPen(pen) return (x, rw) x = .5 y = .5 keys = self.kb["keys"] ext_return = self.kb["extended_return"] first_key_w = 0 rows = 4 remaining_x = [0, 0, 0, 0] remaining_widths = [0, 0, 0, 0] for i in range(0, rows): if first_key_w > 0: first_key_w = first_key_w * 1.375 if self.kb == self.kb_105 and i == 3: first_key_w = kw * 1.275 rect = QRectF(x, y, first_key_w, kw) p.drawRoundedRect(rect, rx, rx) x = x + first_key_w + space else: first_key_w = kw x, rw = drawRow(keys[i], x, y, i == 1 and not ext_return) remaining_x[i] = x remaining_widths[i] = rw if i != 1 and i != 2: rect = QRectF(x, y, rw, kw) p.drawRoundedRect(rect, rx, rx) x = .5 y = y + space + kw if ext_return: rx = rx * 2 x1 = remaining_x[1] y1 = .5 + kw * 1 + space * 1 w1 = remaining_widths[1] x2 = remaining_x[2] y2 = .5 + kw * 2 + space * 2 # this is some serious crap... but it has to be so # maybe one day keyboards won't look like this... # one can only hope pp = QPainterPath() pp.moveTo(x1, y1 + rx) pp.arcTo(x1, y1, rx, rx, 180, -90) pp.lineTo(x1 + w1 - rx, y1) pp.arcTo(x1 + w1 - rx, y1, rx, rx, 90, -90) pp.lineTo(x1 + w1, y2 + kw - rx) pp.arcTo(x1 + w1 - rx, y2 + kw - rx, rx, rx, 0, -90) pp.lineTo(x2 + rx, y2 + kw) pp.arcTo(x2, y2 + kw - rx, rx, rx, -90, -90) pp.lineTo(x2, y1 + kw) pp.lineTo(x1 + rx, y1 + kw) pp.arcTo(x1, y1 + kw - rx, rx, rx, -90, -90) pp.closeSubpath() p.drawPath(pp) else: x = remaining_x[2] y = .5 + kw * 2 + space * 2 rect = QRectF(x, y, remaining_widths[2], kw) p.drawRoundedRect(rect, rx, rx) QWidget.paintEvent(self, pe)