Как автоматически форматировать текст QLabel

Я хотел бы, чтобы текст автоматически помещался внутри метки. Поскольку ширина QLabel становится все более узкой, текстовые форматы занимают несколько строк. По сути, я ищу способ отформатировать его так же, как текст html форматируется при изменении размера окна веб-браузера.

label=QtGui.QLabel()  

text = "Somewhere over the rainbow Way up high And the dreams that you dreamed of Once in a lullaby"    

label.setText(text)
label.show()

person alphanumeric    schedule 22.04.2016    source источник
comment
Вы пробовали label.setWordWrap(True)?   -  person Frank Osterfeld    schedule 22.04.2016


Ответы (1)


В итоге я использовал QLabel resizeEvent(), чтобы получить значение ширины метки в реальном времени, которое используется для форматирования монофонного текста метки на лету:

введите здесь описание изображения

text = "Somewhere over the rainbow Way up high And the dreams that you dreamed of Once in a lullaby..."    

class Label(QtGui.QLabel):
    def __init__(self, parent=None):
        super(Label, self).__init__(parent)  

    def resizeEvent(self, event):
        self.formatText()
        event.accept()

    def formatText(self):
        width = self.width()
        text = self.text()
        new = ''
        for word in text.split():
            if len(new.split('\n')[-1])<width*0.1:
                new = new + ' ' + word
            else:
                new = new + '\n' + ' ' + word
        self.setText(new)

myLabel = Label()
myLabel.setText(text)
myLabel.resize(300, 50)
font = QtGui.QFont("Courier New", 10)
font.setStyleHint(QtGui.QFont.TypeWriter)
myLabel.setFont(font)
myLabel.formatText()
myLabel.show()
person alphanumeric    schedule 22.04.2016
comment
Что не так с предложением Фрэнка Остерфельда? Я почти уверен, что свойство wordWrap сделает это за вас. - person ymoreau; 25.04.2016
comment
Предложения Фрэн великолепны! Я пропустил его комментарий. Хотел бы я увидеть это раньше! Спасибо! - person alphanumeric; 25.04.2016