Текст метки автоматически растягивается до родительского pyqt5

Я пытаюсь растянуть текст в метке до его размера.

Например, если я увеличиваю высоту метки, то размер внутреннего текста должен увеличиваться только по вертикали.

Если я увеличиваю ширину метки, то размер внутреннего текста должен увеличиваться и растягиваться только по горизонтали.

Как я могу это сделать?


person dauren slambekov    schedule 22.06.2020    source источник


Ответы (1)


Вы можете использовать QPainterPath и QTransform, чтобы деформировать текст:

Нарисуйте свой текст в QPainterPath с произвольным размером шрифта. Основываясь на размерах вашего виджета и пути, вы получите коэффициент масштабирования. Преобразуйте свой путь, затем нарисуйте его:

class Widget(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.text = "foobar"

    def paintEvent(self, event):
        super().paintEvent(event)

        painter = QPainter(self)

        textPath = QPainterPath()
        textPath.addText(QPointF(0, 0), painter.font(), self.text)

        size = textPath.boundingRect()

        scaleX = self.width() / size.width()
        scaleY = self.height() / size.height()

        transformation = QTransform()
        transformation.scale(scaleX, scaleY)

        textPath = transformation.map(textPath) # the text will be resized
        textPath.translate(0, textPath.boundingRect().height()) # path needs to be "recentered" after transformation

        painter.drawPath(textPath)
person Dimitry Ernot    schedule 22.06.2020