У меня есть этот фрагмент кода:PySide: отформатированный текст в QComboBox
import PySide.QtGui
app = PySide.QtGui.QApplication('')
wnd = PySide.QtGui.QWidget()
mly = PySide.QtGui.QVBoxLayout()
combo = PySide.QtGui.QComboBox()
table = [ ('Lorem','ipsum','dolor','sit','amet'),
('Aliquam','sodales','nunc','eget','lorem'),
('Vivamus','et','sapien','mattis','vulputate'),
('Integer','ac','dolor','commodo','cursus'),
('Sed','sed','erat','non','magna'),
('Duis','vestibulum','eu','tortor','euismod') ]
combo.clear()
for (one,two,three,four,five) in table:
combo.addItem('%-12s | %-12s | %-12s | %-12s | %-12s' % (one,two,three,four,five))
mly.addWidget(combo)
mly.addStretch(1)
wnd.setLayout(mly)
wnd.show()
app.exec_()
Я получил this (1) и я ищу что-то вроде (2): все столбцы табличным.
Комбобокс имеет стандартный пропорциональный шрифт (MS Shell Dlg 2 от QtDesigner). Я не хочу использовать моноширинный шрифт.
Я попытался вычислить максимальную ширину в пикселях каждого столбца с combo.fontMetrics().boundingRect(text).width()
и заполнить каждый столбец с пробелами:
borde = ' '
unspc = ' '
maxwdt = {0:0, 1:0, 2:0, 3:0, 4:0}
for lstlin in table:
for (ndx,val) in enumerate(lstlin):
unwdt = combo.fontMetrics().boundingRect(borde + val + borde).width()
if (unwdt > maxwdt[ndx]):
maxwdt[ndx] = unwdt
combo.clear()
for lstlin in table:
txtlin = ''
for (ndx,val) in enumerate(lstlin):
txtcmp = borde + val + borde
while (combo.fontMetrics().boundingRect(txtcmp).width() < maxwdt[ndx]):
txtcmp += unspc
txtlin += txtcmp + '|'
combo.addItem(txtlin)
и я получил (3).
Существует какой-либо другой способ форматирования текста с пропорциональным шрифтом для использования в QComboBox ?. Благодарю.
прекрасно работает в Linux, Windows 7 и Windows 8. Не работает в Windows XP, потому что UTF8 не включен, но этого решения для меня достаточно. Благодаря!. – mangelo