覆盖 QLabel 中的 setText()

Override setText() in QLabel

我正在尝试制作一个 QLabel 小部件,它将调整文本的字体大小,以便整个文本始终适合 QLabel。

class QLabelFontAutoResize(QLabel):
    def __init__(self, text):
        super(QLabelFontAutoResize, self).__init__()
        self._text = text
        self.setText(self._text)

    def setText(self, text):
        width     = float( self.size().width() )
        _font     = self.font()
        _fontSize = 1

        #Find Correct Font Size
        while (True):
            _font.setPointSize(_fontSize)
            _fontMetric = QFontMetrics( _font )

            #Text width exceeds QLabel width
            if _fontMetric.width(text) > width:
                _fontSize = _fontSize-1
                break
            _fontSize = _fontSize + 1

        _font.setPointSize(_fontSize)
        self.setFont(_font)

        #This is recursive, How do I actually set the Text
        self.setText(text)

如何在不创建递归函数的情况下覆盖 setText(),并实际设置 QLabel 的文本?

注意:QLabel 的大小是固定的,不会调整大小,所以我没有覆盖 resizeEvent。我希望在设置文本时更改字体。

你只需要调用父类的方法:

class QLabelFontAutoResize(QLabel):
    [...]
    def setText(self, text):
        [...]
        self.setFont(_font)
        QLabel.setText(self, text)
        # super(QLabelFontAutoResize, self).setText(text)
        # super().setText(text)