代码之家  ›  专栏  ›  技术社区  ›  Dennis Miller

重写QLabel中的setText()

  •  0
  • Dennis Miller  · 技术社区  · 8 年前

    我正在尝试制作一个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。我想在设置文本时更改字体。

    1 回复  |  直到 8 年前
        1
  •  0
  •   eyllanesc    8 年前

    您只需调用父方法:

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