def _paint_icon(self, iconic, painter, rect, mode, state, options): """Paint a single icon.""" painter.save() color = options['color'] char = options['char'] color_options = { QIcon.On: { QIcon.Normal: (options['color_on'], options['on']), QIcon.Disabled: (options['color_on_disabled'], options['on_disabled']), QIcon.Active: (options['color_on_active'], options['on_active']), QIcon.Selected: (options['color_on_selected'], options['on_selected']) }, QIcon.Off: { QIcon.Normal: (options['color_off'], options['off']), QIcon.Disabled: (options['color_off_disabled'], options['off_disabled']), QIcon.Active: (options['color_off_active'], options['off_active']), QIcon.Selected: (options['color_off_selected'], options['off_selected']) } } color, char = color_options[state][mode] painter.setPen(QColor(color)) # A 16 pixel-high icon yields a font size of 14, which is pixel perfect # for font-awesome. 16 * 0.875 = 14 # The reason why the glyph size is smaller than the icon size is to # account for font bearing. draw_size = 0.875 * round(rect.height() * options['scale_factor']) prefix = options['prefix'] # Animation setup hook animation = options.get('animation') if animation is not None: animation.setup(self, painter, rect) painter.setFont(iconic.font(prefix, draw_size)) if 'offset' in options: rect = QRect(rect) rect.translate(options['offset'][0] * rect.width(), options['offset'][1] * rect.height()) painter.setOpacity(options.get('opacity', 1.0)) painter.drawText(rect, Qt.AlignCenter | Qt.AlignVCenter, char) painter.restore()
def paint_icon(self, painter, option, index, align=None): """ Draws the icon for the item :param painter: QPainter :param option: QStyleOptionViewItem :param index: int :param align: Qt.Align """ column = index.column() pixmap = self.pixmap(column) if not pixmap: return rect = self.icon_rect(option) pixmap = self._scale_pixmap(pixmap, rect) pixmap_rect = QRect(rect) pixmap_rect.setWidth(pixmap.width()) pixmap_rect.setHeight(pixmap.height()) align = align or Qt.AlignHCenter | Qt.AlignVCenter x, y = 0, 0 align_bottom_a = Qt.AlignBottom | Qt.AlignLeft align_bottom_b = align == Qt.AlignBottom | Qt.AlignHCenter or align == Qt.AlignBottom | Qt.AlignRight align_h_center_a = Qt.AlignHCenter or align == Qt.AlignCenter align_h_center_b = align == Qt.AlignHCenter | Qt.AlignBottom or align == Qt.AlignHCenter | Qt.AlignTop align_v_center_a = align == Qt.AlignVCenter | Qt.AlignLeft or align == Qt.AlignVCenter | Qt.AlignRight align_v_center_b = Qt.AlignVCenter or align == Qt.AlignCenter is_align_bottom = align == align_bottom_a or align_bottom_b is_align_h_center = align == align_h_center_a or align_h_center_b is_align_v_center = align == align_v_center_a or align_v_center_b if is_align_h_center: x += float(rect.width() - pixmap.width()) / 2 elif is_align_v_center: y += float(rect.height() - pixmap.height()) / 2 elif is_align_bottom: y += float(rect.height() - pixmap.height()) pixmap_rect.translate(x, y) painter.drawPixmap(pixmap_rect, pixmap)
def snapshot(self): """ Takes snapshot """ if not self._save_path: LOGGER.error('Path not specificed for snapshot.') return rect = QRect(self._snap_widget.rect()) pos = self._snap_widget.mapToGlobal(QPoint(0, 0)) rect.translate(pos.x(), pos.y()) self.setWindowOpacity(0) self._snapshot_pixmap = qtutils.desktop_pixmap_from_rect(rect) dir_path = os.path.dirname(self._save_path) if not os.path.exists(os.path.dirname(dir_path)): os.makedirs(dir_path) self.save(self._save_path, self._image_type) self.close()
class Example(QWidget): def __init__(self): super(Example, self).__init__() self.initUI() def initUI(self): self.setFixedSize(400, 400) self.setWindowTitle('Colours') self.btnPaint = QPushButton("Paint", self) self.btnMove = QPushButton("Move x+1 y+1", self) self.rect = QRect() self.btnPaint.clicked.connect(self.onPaint) self.btnMove.clicked.connect(self.onMove) self.hlayout = QHBoxLayout(self) self.hlayout.addWidget(self.btnPaint) self.hlayout.addWidget(self.btnMove) self.hlayout.addStretch(1) self.show() def onPaint(self): if self.rect.isNull(): self.rect = QRect(10, 15, 80, 45) self.update() def onMove(self): if not self.rect.isNull(): self.rect.translate(QPoint(1, 1)) self.update() def paintEvent(self, e): qp = QPainter(self) qp.setPen(QColor("#d4d4d4")) qp.setBrush(QColor(200, 0, 0)) qp.drawRect(self.rect)