在PyQt4 QTableWidget中将最小列宽设置为标题宽度

8 投票
1 回答
16091 浏览
提问于 2025-04-16 00:48

我正在使用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_()

当应用程序运行时,第一列非常宽,而其他列则显得有点挤。

有没有办法让表格的列宽根据标题的宽度来调整,而不是根据里面的数据呢?更好的是,能不能让每一列的宽度都达到数据和标题的最大宽度呢?

更新:我试过在表格上调用resizeColumnsToContents(),但视图变得非常混乱:

Python表格 http://img514.imageshack.us/img514/8633/tablef.png

** 更新2**:只要在所有单元格和标题都插入到表格后调用resizeColumnsToContents(),它就能正常工作。

1 个回答

9
table.resizeColumnsToContents()

这个方法应该能解决这个具体的例子。

如果你还没有的话,记得把PyQt的文档收藏起来(当你需要找某个特定的功能时,这个文档会很有用)。

撰写回答