Ширина столбца минимума набора к ширине заголовка в PyQt4 QTableWidget

Я работаю с QTableWidget компонент в PyQt4 и я, может казаться, не получаю столбцы к размеру правильно, согласно их соответствующим продолжительностям заголовка.

Вот то, на что сервировка должна быть похожей (без каналов, очевидно):

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_()

Когда приложение выполняется, первый столбец довольно широк, в то время как другие столбцы несколько сжаты.

Существует ли способ вызвать таблицу к размеру согласно ширинам заголовка, а не сами данные? Еще лучше существует ли способ вынудить каждую ширину столбца быть максимальной шириной значений заголовка и данных?

Обновление: я попытался звонить resizeColumnsToContents() на таблице, но представлении становится ужасно искаженным:

Таблица Python http://img514.imageshack.us/img514/8633/tablef.png

** Update2 **: resizeColumnsToContents() работает просто великолепно, пока это называют после того, как все ячейки и заголовки были вставлены в таблицу.

8
задан Brian Tompsett - 汤莱恩 22 March 2017 в 18:31
поделиться

1 ответ

table.resizeColumnsToContents()

должен помочь в этом конкретном примере.

Не забудьте добавить в закладки документацию PyQt , если вы еще этого не сделали (это удобно, когда вы ищете конкретную функцию).

8
ответ дан 5 December 2019 в 20:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: