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)
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)
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, )
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)
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))