2017-11-29 3 views
0

전체 텍스트가 항상 QLabel에 맞도록 텍스트의 글꼴 크기를 조정하는 QLabel 위젯을 만들려고합니다.QLabel의 setText() 덮어 쓰기

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()를 오버라이드 (override) 할, 실제로 QLabel의 텍스트를 설정?

참고 : QLabel은 고정 크기이며 크기가 조정되지 않으므로 resizeEvent를 재정의하지 않습니다. 텍스트를 설정할 때 글꼴을 변경하고 싶습니다.

+0

'슈퍼()의 setText (텍스트)' – furas

답변

0

당신은 단지 부모의 메소드를 호출 할 수 있습니다.

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