PySide/PyQt обрезает текст в QLabel на основе минимального размера

Мне интересно, как лучше всего обрезать текст в QLabel на основе его максимальной ширины/высоты. Входящий текст может быть любой длины, но для того, чтобы сохранить аккуратный макет, я хотел бы обрезать длинные строки, чтобы заполнить максимальное пространство (максимальной ширины/высоты виджета ).

Например.:

 'A very long string where there should only be a short one, but I can't control input to the widget as it's a user given value'

станет:

'A very long string where there should only be a short one, but...'

в зависимости от необходимого пространства для текущего шрифта.

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

Вот простой пример того, что мне нужно, хотя это основано на количестве слов, недоступном месте:

import sys
from PySide.QtGui import *
from PySide.QtCore import *


def truncateText(text):
    maxWords = 10
    words = text.split(' ')
    return ' '.join(words[:maxWords]) + '...'

app = QApplication(sys.argv)

mainWindow = QWidget()
layout = QHBoxLayout()
mainWindow.setLayout(layout)

text = 'this is a very long string, '*10
label = QLabel(truncateText(text))
label.setWordWrap(True)
label.setFixedWidth(200)
layout.addWidget(label)

mainWindow.show()
sys.exit(app.exec_())
5
задан Frank Rueter 12 July 2012 в 06:57
поделиться