2010-07-04 92 views
7

我正在使用PyQt4中的QTableWidget组件,并且根据各自的标题长度,似乎无法正确获取列的大小。在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 Table http://img514.imageshack.us/img514/8633/tablef.png

** ** UPDATE2:resizeColumnsToContents()作品就好了,只要它被称为之后所有的单元格和头文件都被插入到表格中。

回答

8
table.resizeColumnsToContents() 

应该为这个特定的例子做技巧。

如果您还没有这样做,请务必为PyQt documentation添加书签(当您正在寻找特定功能时方便)。

+0

感谢您的回复,但我已经尝试resizeColumnsToContents()。它将列调整为数据,并且标题变得不可读。我有文档(我经常使用它),但我似乎无法找到解决这个令人头疼的问题。 – bedwyr 2010-07-04 20:17:07

+0

@bedwyr:也许这个问题是在其他地方触发的(您可能继承的.ui(设计器)文件中的属性?)。我无法在这里重现问题(PyQt 4.5.4 iirc,Mac)。这就是你的示例代码(添加了一个简单的'table.resizeColumnsToContents()'):http://img210.imageshack.us/img210/9968/screenshot20100704at225.png – ChristopheD 2010-07-04 21:01:04

+0

我设计了一切手工(不使用Qt Designer),所以很可能是我做错了:^)我在Linux上使用4.7.2,所以在Linux端口中可能有些不同。但我对此表示怀疑。这个问题很可能在我的最后。我会继续挖掘 - 谢谢! – bedwyr 2010-07-04 21:43:22