Я работаю с компонентом QTableWidget
в PyQt4, и я не могу получить правильные размеры столбцов в соответствии с их соответствующими размерами заголовков.Установите минимальную ширину столбца на ширину заголовка в PyQt4 QTableWidget
Вот что макет таблицы должна выглядеть (без труб, очевидно):
Index | Long_Header | Longer_Header
1 | 102402 | 100
2 | 123123 | 2
3 | 454689 | 18
Код я работаю выглядит примерно так:
import sys
from PyQt4.QtCore import QStringList, QString
from PyQt4.QtGui import QApplication, QMainWindow, QSizePolicy
from PyQt4.QtGui import QTableWidget, QTableWidgetItem
def createTable():
table = QTableWidget(5, 3)
table.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
headers = QStringList()
headers.append(QString("Index"))
headers.append(QString("Long_Header"))
headers.append(QString("Longer_Header"))
table.setHorizontalHeaderLabels(headers)
table.horizontalHeader().setStretchLastSection(True)
# ignore crappy names -- this is just an example :)
cell1 = QTableWidgetItem(QString("1"))
cell2 = QTableWidgetItem(QString("102402"))
cell3 = QTableWidgetItem(QString("100"))
cell4 = QTableWidgetItem(QString("2"))
cell5 = QTableWidgetItem(QString("123123"))
cell6 = QTableWidgetItem(QString("2"))
cell7 = QTableWidgetItem(QString("3"))
cell8 = QTableWidgetItem(QString("454689"))
cell9 = QTableWidgetItem(QString("18"))
table.setItem(0, 0, cell1)
table.setItem(0, 1, cell2)
table.setItem(0, 2, cell3)
table.setItem(1, 0, cell4)
table.setItem(1, 1, cell5)
table.setItem(1, 2, cell6)
table.setItem(2, 0, cell7)
table.setItem(2, 1, cell8)
table.setItem(2, 2, cell9)
return table
if __name__ == '__main__':
app = QApplication(sys.argv)
mainW = QMainWindow()
mainW.setMinimumWidth(300)
mainW.setCentralWidget(createTable())
mainW.show()
app.exec_()
Когда приложение выполняет, первая колонка довольно широкая, а другие столбцы несколько сжаты.
Есть ли способ заставить таблицу размеру в соответствии с шириной заголовка, а не самими данными? Еще лучше, есть ли способ заставить каждую ширину столбца быть максимальной шириной значений данных и заголовков?
Update: Я пытался дозвониться resizeColumnsToContents()
на столе, но вид становится ужасно изуродованным:
Python Table http://img514.imageshack.us/img514/8633/tablef.png
** Update2 **: resizeColumnsToContents()
работает нормально до тех пор, как это называется после все ячейки и заголовки были вставлены в таблицу.
Спасибо за ответ, но я уже попробовал resizeColumnsToContents(). Он изменяет размеры столбцов на данные, а заголовки становятся нечитаемыми. У меня есть документация (я использую ее постоянно), но я не могу найти решение этой неприятной проблемы. – bedwyr
@bedwyr: Может быть проблема запущена в другом месте (свойства в файле .ui (designer), который вы наследуете, возможно,?). Я не могу воспроизвести проблему здесь (PyQt 4.5.4 iirc, Mac). Это то, что ваш примерный код (с добавлением простой 'table.resizeColumnsToContents()') выглядит следующим образом: http://img210.imageshack.us/img210/9968/screenshot20100704at225.png – ChristopheD
Я разработал все вручную (не используя Qt Designer), поэтому, вероятно, я что-то делаю неправильно: ^) Я использую 4.7.2 на Linux, так что в Linux-порту возможно что-то другое; Но я сомневаюсь. Проблема, скорее всего, на моем конце. Я буду рыть - спасибо! – bedwyr