在PyQt4中将最小列宽设置为标题宽度QTableWidget
问题描述:
我正在使用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()
作品就好了,只要它被称为在之后所有的单元格和头文件都被插入到表格中。
答
感谢您的回复,但我已经尝试resizeColumnsToContents()。它将列调整为数据,并且标题变得不可读。我有文档(我经常使用它),但我似乎无法找到解决这个令人头疼的问题。 – bedwyr 2010-07-04 20:17:07
@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
我设计了一切手工(不使用Qt Designer),所以很可能是我做错了:^)我在Linux上使用4.7.2,所以在Linux端口中可能有些不同。但我对此表示怀疑。这个问题很可能在我的最后。我会继续挖掘 - 谢谢! – bedwyr 2010-07-04 21:43:22