def __init__(self, parent, color="#FFFFFF", type_text="N/A", font_size=24):
        super().__init__(parent=parent)
        if not config.qt_app:
            return
        self._font_size = font_size
        # for high dpi scaling
        self._pixel_ratio = config.qt_app.devicePixelRatio()

        self._value_label = QtWidgets.QLabel(self)
        self._value_label.setText("N/A")

        self._type_label = QtWidgets.QLabel(self)
        self._type_label.setText(type_text)

        self.draw_box(color, color)

        self._type_label.setGeometry(self.x() + self.TYPE_LABEL_OFFSET, self.y(),
                                     int(self.WIDTH * self.TYPE_LABEL_REL_SIZE), self.HEIGHT)
        self._type_label.setAttribute(QtCore.Qt.WA_TranslucentBackground, True)
#        self._type_label.setFont(font)
        self._type_label.setStyleSheet("QLabel{color: rgb(255, 255, 255)}")
        self._type_label.setAlignment(Qt.AlignmentFlag(Qt.AlignLeft | Qt.AlignVCenter))
        self._type_label.setObjectName(type_text)

        extra_margin = 5
        self._value_label.setGeometry(int(self.x() + self.WIDTH * self.TYPE_LABEL_REL_SIZE), self.y(),
                                      int(self.WIDTH * (1 - self.TYPE_LABEL_REL_SIZE) -
                                          self.TYPE_LABEL_OFFSET - extra_margin),
                                      self.HEIGHT)
        self._value_label.setAttribute(QtCore.Qt.WA_TranslucentBackground, True)
 #       self._value_label.setFont(font)
        self._value_label.setStyleSheet("QLabel{color: rgb(255, 255, 255)}")
        self._value_label.setAlignment(Qt.AlignmentFlag(Qt.AlignRight | Qt.AlignVCenter))
        self._value_label.setObjectName(type_text + "_value")
Beispiel #2
0
    def paint(
        self,
        painter: QPainter,
        option: QStyleOptionViewItem,
        idx: QModelIndex,
    ) -> None:
        font_family = idx.data(Qt.ItemDataRole.DisplayRole)
        font = QFont(option.font)
        font.setPointSize(QFontInfo(font).pointSize() * 3 // 2)
        font2 = QFont(font)
        font2.setFamily(font_family)

        if option.state & QStyle.StateFlag.State_Selected:
            painter.save()
            painter.setBrush(option.palette.highlight())
            painter.setPen(Qt.PenStyle.NoPen)
            painter.drawRect(option.rect)
            painter.setPen(QPen(option.palette.highlightedText(), 0))

        icon = self.bitmap
        if QFontDatabase().isSmoothlyScalable(font_family):
            icon = self.truetype
        actual_size = icon.actualSize(option.rect.size())

        icon.paint(
            painter,
            option.rect,
            Qt.AlignmentFlag(Qt.AlignmentFlag.AlignLeft
                             | Qt.AlignmentFlag.AlignVCenter),
        )
        if option.direction == Qt.LayoutDirection.RightToLeft:
            option.rect.setRight(option.rect.right() - actual_size.width() - 4)
        else:
            option.rect.setLeft(option.rect.left() + actual_size.width() + 4)

        half1 = QRect(option.rect)
        half2 = QRect(option.rect)
        half1.setRight(half1.right() // 2)
        half2.setLeft(half1.right())

        painter.drawText(
            half1,
            Qt.AlignmentFlag.AlignVCenter
            | Qt.AlignmentFlag.AlignLeading
            | Qt.TextFlag.TextSingleLine,
            font_family,
        )

        old = painter.font()
        painter.setFont(font2)
        painter.drawText(
            half2,
            Qt.AlignmentFlag.AlignVCenter
            | Qt.AlignmentFlag.AlignLeading
            | Qt.TextFlag.TextSingleLine,
            self.sample_text,
        )
        painter.setFont(old)

        if option.state & QStyle.StateFlag.State_Selected:
            painter.restore()