def paintEvent(self, event): contents_y = self.edit.verticalScrollBar().value() page_bottom = contents_y + self.edit.viewport().height() font_metrics = self.fontMetrics() current_block = self.edit.document().findBlock(self.edit.textCursor().position()) painter = QPainter(self) line_count = 0 block = self.edit.document().begin() while block.isValid(): line_count += 1 position = self.edit.document().documentLayout().blockBoundingRect(block).topLeft() if position.y() > page_bottom: break bold = False if block == current_block: bold = True font = painter.font() font.setBold(True) painter.setFont(font) self.current = line_count painter.drawText( self.width() - font_metrics.width(str(line_count)) - 10, round(position.y()) - contents_y + font_metrics.ascent(), str(line_count), ) if bold: font = painter.font() font.setBold(False) painter.setFont(font) block = block.next() self.highest_line = line_count painter.end() QWidget.paintEvent(self, event)
def paintEvent(self, event): contents_y = self.edit.verticalScrollBar().value() page_bottom = contents_y + self.edit.viewport().height() font_metrics = self.fontMetrics() current_block = self.edit.document().findBlock( self.edit.textCursor().position()) painter = QPainter(self) line_count = 0 block = self.edit.document().begin() while block.isValid(): line_count += 1 position = self.edit.document().documentLayout().blockBoundingRect( block).topLeft() if position.y() > page_bottom: break bold = False if block == current_block: bold = True font = painter.font() font.setBold(True) painter.setFont(font) self.current = line_count painter.drawText( self.width() - font_metrics.width(str(line_count)) - 10, round(position.y()) - contents_y + font_metrics.ascent(), str(line_count)) if bold: font = painter.font() font.setBold(False) painter.setFont(font) block = block.next() self.highest_line = line_count painter.end() QWidget.paintEvent(self, event)
def numberbarPaint(self, number_bar, event): """Paints the line numbers of the code file""" self.number_bar.link = [] font_metrics = self.getWidget().fontMetrics() current_line = self.getWidget().document().findBlock( self.getWidget().textCursor().position()).blockNumber() + 1 block = self.getWidget().firstVisibleBlock() line_count = block.blockNumber() painter = QPainter(self.number_bar) # TODO: second argument is color -> to settings painter.fillRect(self.number_bar.rect(), self.getWidget().palette().base()) # Iterate over all visible text blocks in the document. while block.isValid(): line_count += 1 text = str(line_count) block_top = self.getWidget().blockBoundingGeometry( block).translated(self.getWidget().contentOffset()).top() if not block.isVisible(): block = block.next() while not block.isVisible(): line_count += 1 block = block.next() continue self.number_bar.link.append((block_top, line_count)) # Check if the position of the block is out side of the visible # area. if block_top >= event.rect().bottom(): break # We want the line number for the selected line to be bold. if line_count == current_line: font = painter.font() font.setBold(True) else: font = painter.font() font.setBold(False) # line opens a block if line_count in self.hidden: text += "+" font.setUnderline(True) elif block.text().count("(") > block.text().count(")"): text += "-" font.setUnderline(True) else: font.setUnderline(False) painter.setFont(font) # Draw the line number right justified at the position of the # line. paint_rect = QRect(0, block_top, self.number_bar.width(), font_metrics.height()) painter.drawText(paint_rect, Qt.AlignLeft, text) block = block.next() painter.end()
def paintEvent(self, event): """ Paints the widgets: - paints the background - paint each visible blocks that intersects the widget bbox. """ painter = QPainter(self) painter.fillRect(event.rect(), self.back_brush) painter.setPen(self.text_pen) painter.setFont(self.font) w = self.width() - 2 # better name lookup speed painter_drawText = painter.drawText align_right = Qt.AlignRight normal_font = painter.font() normal_font.setBold(False) bold_font = QFont(normal_font) bold_font.setBold(True) active = self.editor.codeEdit.textCursor().blockNumber() for vb in self.editor.codeEdit.visible_blocks: row = vb.row if row == active + 1: painter.setFont(bold_font) else: painter.setFont(normal_font) painter_drawText(0, vb.top, w, vb.height, align_right, str(row)) return Panel.paintEvent(self, event)
def paintEvent(self,event): painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing) base_font = painter.font() self._compute_lengths(painter) if self.no_draw: self.draw_title(painter) self.draw_no_data(painter) return self._draw_grid(painter, self.y_base, self.width(), self.total_height, 6) # self._draw_over_grid(painter) self._draw_legend2(painter, self.legends) self._draw_x_axis(painter, self.x_legends) self._draw_y_axis(painter, self.y_base, self.width(), self.total_height, 6) self.draw_title(painter) painter.setFont(base_font) if self.data: for i in range(len(self.data)): self._draw_serie(painter, i, self.graph_colors[i % len(self.graph_colors)]) if self._horizontal_ruler_y_value != None: self._draw_horizontal_ruler(painter, self._horizontal_ruler_text, self._horizontal_ruler_y_value, self._horizontal_ruler_color) self._draw_selected_items_in_series(painter)
def _numberbar_paint(self, number_bar, event): '''Paint number bar.''' font_metrics = self.fontMetrics() current_line = self.edit.document().findBlock( self.edit.textCursor().position() ).blockNumber() + 1 block = self.edit.firstVisibleBlock() line_count = block.blockNumber() painter = QPainter(number_bar) painter.fillRect(event.rect(), self.palette().base()) # Iterate over all visible text blocks in the document. while block.isValid(): line_count += 1 block_top = self.edit.blockBoundingGeometry(block).\ translated(self.edit.contentOffset()).top() # Check if the position of the block is out side of the visible # area. if not block.isVisible() or block_top >= event.rect().bottom(): break # We want the line number for the selected line to be bold. if line_count == current_line: font = painter.font() font.setBold(True) font.setUnderline(True) painter.setFont(font) else: font = painter.font() font.setBold(False) font.setUnderline(False) painter.setFont(font) # Draw the line number right justified at the position of the # line. paint_rect = QRect(0, block_top, number_bar.width(), font_metrics.height()) painter.drawText(paint_rect, Qt.AlignRight, "{} ".format(unicode(line_count))) block = block.next() painter.end() return
def paintEvent(self, event): text = [] text.append(['{0}; {1}'.format(self.parent.chunkData['X'], self.parent.chunkData['Y']), Qt.black]) if self.parent.chunkData[14] > 0: text.append(['Gold = {0}'.format(self.parent.chunkData[14]), Qt.yellow]) else: text.append(['', Qt.yellow]) if self.parent.chunkData[15] > 0: text.append(['Iron = {0}'.format(self.parent.chunkData[15]), Qt.red]) else: text.append(['', Qt.red]) if self.parent.chunkData[56] > 0: text.append(['Diamond = {0}'.format(self.parent.chunkData[56]), Qt.cyan]) else: text.append(['', Qt.cyan]) if self.parent.chunkData[73] > 0: text.append(['Redstone = {0}'.format(self.parent.chunkData[73]), Qt.magenta]) else: text.append(['', Qt.magenta]) if self.parent.chunkData[49] > 0: text.append(['Obsidian = {0}'.format(self.parent.chunkData[49]), Qt.darkYellow]) else: text.append(['', Qt.darkYellow]) if self.parent.chunkData[21] > 0: text.append(['Lazurit = {0}'.format(self.parent.chunkData[21]), Qt.darkBlue]) else: text.append(['', Qt.darkBlue]) painter = QPainter() painter.begin(self) painter.drawRect(self.parent.leftMargin, self.parent.topMargin, self.edgeLen, self.edgeLen) cX = self.parent.leftMargin + self.parent.vsepara cY = self.parent.topMargin + self.parent.hsepara alig = Qt.AlignCenter i = 0 fontik = painter.font() for t in text: if i > 0: alig = Qt.AlignLeft painter.setPen(t[1]) if i == 2: fontik.setUnderline(True) else: fontik.setUnderline(False) painter.setFont(fontik) painter.drawText(cX, cY, self.tBoxWidth, self.tBoxHeight, alig, t[0]) cY += self.lineSpacing i += 1 painter.end() del painter
def paintEvent(self, event): QPushButton.paintEvent(self, event) qp = QPainter() qp.begin(self) font = qp.font() font.setPixelSize(8) font.setWeight(QFont.Normal) qp.setFont(font) qp.drawText(event.rect().translated(1, 1), str(self._atomic_number)) qp.end()
def paintEvent(self, event): super().paintEvent(event) painter = QPainter(self) # Рисование цифр в ячейки таблицы for i in range(self.matrix_size): for j in range(self.matrix_size): # Если текущая ячейка относится к дефолтной судоку if self.def_num_matrix[i][j]: painter.save() # painter.setPen() painter.setBrush(Qt.yellow) x = i * self.cell_size y = j * self.cell_size w, h = self.cell_size, self.cell_size painter.drawRect(x, y, w, h) painter.restore() # TODO: Закомментировано # Если индекс ячейки под курсором валидный if 0 <= self.x_highlight_cell < self.matrix_size and 0 <= self.y_highlight_cell < self.matrix_size: # # Выделение всего столбца и строки пересекающих ячейку под курсором # painter.save() # painter.setBrush(Qt.lightGray) # # # Выделение строки # for i in range(self.matrix_size): # painter.drawRect(i * self.cell_size, # self.y_highlight_cell * self.cell_size, # self.cell_size, # self.cell_size) # # # Выделение столбца # for j in range(self.matrix_size): # painter.drawRect(self.x_highlight_cell * self.cell_size, # j * self.cell_size, # self.cell_size, # self.cell_size) # # painter.restore() x, y = self.x_highlight_cell, self.y_highlight_cell # Не подсвечиваем дефолтную ячейку if not self.def_num_matrix[x][y]: # Выделение ячейки под курсором painter.save() painter.setBrush(Qt.darkYellow) painter.drawRect(x * self.cell_size, y * self.cell_size, self.cell_size, self.cell_size) painter.restore() # Рисование цифр в ячейки таблицы for i in range(self.matrix_size): for j in range(self.matrix_size): num = self.matrix[i][j] if not num: continue num = str(num) # Алгоритм изменения размера текста взят из http://stackoverflow.com/a/2204501 # Для текущего пришлось немного адаптировать factor = (self.cell_size / 2) / painter.fontMetrics().width(num) if factor < 1 or factor > 1.25: f = painter.font() point_size = f.pointSizeF() * factor if point_size > 0: f.setPointSizeF(point_size) painter.setFont(f) x = i * self.cell_size y = j * self.cell_size w, h = self.cell_size, self.cell_size painter.drawText(x, y, w, h, Qt.AlignCenter, num) # Рисование сетки таблицы y1, y2 = 0, 0 factor = min(self.width(), self.height()) / self.default_size size = self.default_pen_size_1 size2 = self.default_pen_size_2 if factor < 1 or factor > 1.25: size *= factor if size < self.min_default_pen_size_2: size = self.min_default_pen_size_2 painter.save() for i in range(self.matrix_size + 1): painter.setPen(QPen(Qt.black, size2 if i % 3 == 0 and i and i < self.matrix_size else size)) painter.drawLine(0, y1, self.cell_size * self.matrix_size, y2) y1 += self.cell_size y2 += self.cell_size x1, x2 = 0, 0 for i in range(self.matrix_size + 1): painter.setPen(QPen(Qt.black, size2 if i % 3 == 0 and i and i < self.matrix_size else size)) painter.drawLine(x1, 0, x2, self.cell_size * self.matrix_size) x1 += self.cell_size x2 += self.cell_size painter.restore()
def paintEvent( self, event ): painter = QPainter() painter.begin(self) painter.setRenderHint(painter.Antialiasing) font = painter.font() font.setBold(True) painter.setFont(font) x = self.rect().x() y = self.rect().y() w = self.rect().width() - 1 h = self.rect().height() - 1 r = 8 # draw a rounded style if self._rolloutStyle == 2: # draw the text painter.drawText(x + 33, y + 3, w, 16, Qt.AlignLeft | Qt.AlignTop, self.title()) # draw the triangle self.__drawTriangle(painter, x, y) # draw the borders pen = QPen(self.palette().color(QPalette.Light)) pen.setWidthF(0.6) painter.setPen(pen) painter.drawRoundedRect(x + 1, y + 1, w - 1, h - 1, r, r) pen.setColor(self.palette().color(QPalette.Shadow)) painter.setPen(pen) painter.drawRoundedRect(x, y, w - 1, h - 1, r, r) # draw a square style if self._rolloutStyle == 3: # draw the text painter.drawText(x + 33, y + 3, w, 16, Qt.AlignLeft | Qt.AlignTop, self.title()) self.__drawTriangle(painter, x, y) # draw the borders pen = QPen(self.palette().color(QPalette.Light)) pen.setWidthF(0.6) painter.setPen(pen) painter.drawRect(x + 1, y + 1, w - 1, h - 1) pen.setColor(self.palette().color(QPalette.Shadow)) painter.setPen(pen) painter.drawRect(x, y, w - 1, h - 1) # draw a Maya style if self._rolloutStyle == 4: # draw the text painter.drawText(x + 33, y + 3, w, 16, Qt.AlignLeft | Qt.AlignTop, self.title()) painter.setRenderHint(QPainter.Antialiasing, False) self.__drawTriangle(painter, x, y) # draw the borders - top headerHeight = 20 headerRect = QRect(x + 1, y + 1, w - 1, headerHeight) headerRectShadow = QRect(x - 1, y - 1, w + 1, headerHeight + 2) # Highlight pen = QPen(self.palette().color(QPalette.Light)) pen.setWidthF(0.4) painter.setPen(pen) painter.drawRect(headerRect) painter.fillRect(headerRect, QColor(255, 255, 255, 18)) # Shadow pen.setColor(self.palette().color(QPalette.Dark)) painter.setPen(pen) painter.drawRect(headerRectShadow) if not self.isCollapsed(): # draw the lover border pen = QPen(self.palette().color(QPalette.Dark)) pen.setWidthF(0.8) painter.setPen(pen) offSet = headerHeight + 3 bodyRect = QRect(x, y + offSet, w, h - offSet) bodyRectShadow = QRect(x + 1, y + offSet, w + 1, h - offSet + 1) painter.drawRect(bodyRect) pen.setColor(self.palette().color(QPalette.Light)) pen.setWidthF(0.4) painter.setPen(pen) painter.drawRect(bodyRectShadow) # draw a boxed style elif self._rolloutStyle == 1: if self.isCollapsed(): arect = QRect(x + 1, y + 9, w - 1, 4) brect = QRect(x, y + 8, w - 1, 4) text = '+' else: arect = QRect(x + 1, y + 9, w - 1, h - 9) brect = QRect(x, y + 8, w - 1, h - 9) text = '-' # draw the borders pen = QPen(self.palette().color(QPalette.Light)) pen.setWidthF(0.6) painter.setPen(pen) painter.drawRect(arect) pen.setColor(self.palette().color(QPalette.Shadow)) painter.setPen(pen) painter.drawRect(brect) painter.setRenderHint(painter.Antialiasing, False) painter.setBrush(self.palette().color(QPalette.Window).darker(120)) painter.drawRect(x + 10, y + 1, w - 20, 16) painter.drawText(x + 16, y + 1, w - 32, 16, Qt.AlignLeft | Qt.AlignVCenter, text) painter.drawText(x + 10, y + 1, w - 20, 16, Qt.AlignCenter, self.title()) if self.dragDropMode(): rect = self.dragDropRect() # draw the lines l = rect.left() r = rect.right() cy = rect.center().y() for y in (cy - 3, cy, cy + 3): painter.drawLine(l, y, r, y) painter.end()