Ejemplo n.º 1
0
 def _add_low_label(self):
     font = self.font()
     font.setPixelSize(9)
     item = QGraphicsSimpleTextItem("Low")
     item.setFont(font)
     item.setX(self.BAR_WIDTH + self.__offset)
     item.setY(self.__bar_height - item.boundingRect().height())
     self.__group.addToGroup(item)
Ejemplo n.º 2
0
 def _add_high_label(self):
     font = self.font()
     font.setPixelSize(9)
     item = QGraphicsSimpleTextItem("High")
     item.setFont(font)
     item.setX(self.BAR_WIDTH + self.__offset)
     item.setY(0)
     self.__group.addToGroup(item)
Ejemplo n.º 3
0
 def _add_feature_label(self):
     font = self.font()
     font.setPixelSize(11)
     item = QGraphicsSimpleTextItem("Feature value")
     item.setRotation(-90)
     item.setFont(font)
     item.setX(self.BAR_WIDTH + self.__offset * 2)
     item.setY(self.__bar_height / 2 + item.boundingRect().width() / 2)
     self.__group.addToGroup(item)
Ejemplo n.º 4
0
class VariableItem(QGraphicsItemGroup):
    MAX_ATTR_LEN = 25
    MAX_LABEL_LEN = 150
    VALUE_FONT_SETTING = {Updater.SIZE_LABEL: 12,
                          Updater.IS_ITALIC_LABEL: True}

    def __init__(self, parent, label: str):
        self.__name: str = None
        self.__value: Optional[str] = None
        self.__name_item = QGraphicsSimpleTextItem()
        self.__value_item = QGraphicsSimpleTextItem()
        font = Updater.change_font(QFont(), self.VALUE_FONT_SETTING)
        self.__value_item.setFont(font)
        self.__max_len = self.MAX_LABEL_LEN
        super().__init__(parent)
        self._set_data(label)

    @property
    def items(self):
        return self.__name_item, self.__value_item

    def boundingRect(self):
        name_br = self.__name_item.boundingRect()
        width = name_br.width()
        height = name_br.height()
        if self.__value_item is not None:
            value_br = self.__value_item.boundingRect()
            width = max(width, value_br.width())
            height += value_br.height()
        return QRectF(-width, 0, width, height)

    def updateGeometry(self):
        self.__elide()
        self.__align_center()
        self.__align_right()

    def set_max_len(self, length: int):
        self.__max_len = length
        self.updateGeometry()

    def _set_data(self, label: str):
        split = label.split("=")
        self.__name = split[0]
        self.__name_item.setToolTip(self.__name)
        self.updateGeometry()  # align before adding to group
        self.addToGroup(self.__name_item)
        if len(split) > 1:
            self.__value = split[1]
            self.__value_item.setToolTip(self.__value)
            self.updateGeometry()  # align before adding to group
            self.addToGroup(self.__value_item)

    def __elide(self):
        fm = QFontMetrics(self.__name_item.font())
        text = fm.elidedText(self.__name, Qt.ElideRight, self.__max_len)
        self.__name_item.setText(text)
        if self.__value is not None:
            fm = QFontMetrics(self.__value_item.font())
            text = fm.elidedText(self.__value, Qt.ElideRight, self.__max_len)
            self.__value_item.setText(text)

    def __align_center(self):
        if self.__value is not None:
            self.__value_item.setY(self.__name_item.boundingRect().height())

    def __align_right(self):
        self.__name_item.setX(-self.__name_item.boundingRect().width())
        if self.__value is not None:
            self.__value_item.setX(-self.__value_item.boundingRect().width())