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")
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()