예제 #1
0
 def sizeHint(self, option: QStyleOptionViewItem,
              index: QModelIndex) -> QSize:
     metrics = QFontMetrics(self.get_font(option))
     left = metrics.size(0, self.left_text(index))
     right = metrics.size(0, self.right_text(index))
     return QSize(max(left.width(), right.width()) + 2 * self.HMARGIN,
                  left.height() + right.height() + 2 * self.VMARGIN)
예제 #2
0
 def sizeHint(self, option: QStyleOptionViewItem,
              index: QModelIndex) -> QSize:
     left = self.icon_size(option).width() + self.HMARGIN
     metrics = QFontMetrics(self.get_font(option))
     first = metrics.size(0, self.first_row_text(index))
     second = metrics.size(0, self.second_row_text(index))
     text_width = max(first.width(), second.width())
     return QSize(left + text_width + 2 * self.HMARGIN,
                  first.height() + second.height() + 2 * self.VMARGIN)
예제 #3
0
    def sizeHint(self, option: QStyleOptionViewItem, index: QModelIndex) -> QSize:
        metrics = QFontMetrics(self.get_font(option))
        widths = []
        heights = []

        icon_size = self.icon_size(option)
        icon_width = 0
        icon_height = 0
        if icon_size.width():
            icon_width = icon_size.width() + self.HMARGIN
        if icon_size.height():
            icon_height = icon_size.height() + self.VMARGIN

        for row in range(self.rows):
            width = 0
            height = 0
            for column in range(self.columns):
                size = metrics.size(0, self.text_for(index, row, column))
                width += size.width()
                height = max(height, size.height())
            widths.append(width)
            heights.append(height)

        return QSize(
            icon_width + max(widths) + 2 * self.HMARGIN,
            max(icon_height, sum(heights)) + 2 * self.VMARGIN,
        )
예제 #4
0
    def _set_filename_text(self, text: str):
        self._lineedit_filename.setText(text)

        font = self._lineedit_filename.font()
        fontMetrics = QFontMetrics(font)
        textSize = fontMetrics.size(0, text)
        textHeight = textSize.height() + 26  # Need to tweak
        self._lineedit_filename.setMaximumHeight(textHeight)
예제 #5
0
    def paintEvent(self, event):
        painter = QPainter()
        painter.begin(self)
        painter.setRenderHint(QPainter.Antialiasing, True)
        painter.setFont(self.__font)
        painter.setPen(self.__pen_line)
        metrics = QFontMetrics(self.__font)
        # text_height = metrics.height()
        text_width = max(
            metrics.size(Qt.TextExpandTabs, name).width()
            for name in self.__names) * 1.2
        self.__item_width = self.width() / float(len(self.__names))
        # self.__item_height = 2.5 * text_height
        self.__item_height = self.frameGeometry().height(
        )  # modified to auto-fit height from layout

        for i, name in enumerate(self.__names):
            if self.__availables[i]:
                color = self.__color_unselected
            else:
                color = self.__color_notavailable
            if i == 0:
                if len(self.__names) == 1:
                    self.__paintOnlyOne(painter, color)
                else:
                    self.__paintStart(painter, color)
            elif i == len(self.__names) - 1:
                self.__paintStop(painter, self.__item_width * i, color)
            else:
                self.__paintMiddle(painter, self.__item_width * i, color)

        if self.__selected is not None:
            if self.__mode == 'stop':
                pos_x = self.__selected * self.__item_width
                if self.__selected == 0:
                    if len(self.__names) == 1:
                        self.__paintOnlyOne(painter, self.__color_selected)
                    else:
                        self.__paintStart(painter, self.__color_selected)
                elif self.__selected == len(self.__names) - 1:
                    self.__paintStop(painter,
                                     self.__item_width * self.__selected,
                                     self.__color_selected)
                else:
                    self.__paintMiddle(painter,
                                       self.__item_width * self.__selected,
                                       self.__color_selected)
            else:
                self.__paintMiddle(painter, self.__pos, self.__color_selected)

        painter.setPen(self.__pen_text)
        for i, name in enumerate(self.__names):
            if i == self.__selected:
                painter.setPen(self.__textColor_selected)
            else:
                painter.setPen(self.__textColor_unselected)
            painter.drawText(
                QRect(self.__item_width * i, 0, self.__item_width,
                      self.__item_height), Qt.AlignCenter, name)
        painter.end()

        self.setMinimumHeight(self.__item_height)
        self.setMinimumWidth(text_width * len(self.__names))