PyQt QTableWidget中表格各列分配宽度的两种方法

在QTableWidget表格部件中,如果需要实现表格中各列要占满部件中的可用空间,同时实现各列平分所有空间,有两种方法来实现。

方法一、设置水平表头的sectionResizeMode为Stretch
当水平表头的sectionResizeMode设置为QHeaderView.Stretch后,各列会自动均分表格部件显示部分的水平空间。

示例代码:

self.tableWidget.horizontalHeader().setSectionResizeMode(QtWidgets.QHeaderView.Stretch)

方法二、设置项的sizeHint属性
使用该方法时,必须设置水平表头的sectionResizeMode为QHeaderView.ResizeToContents,同时设置水平各项的sizeHint值为表格部件视口宽度除以列数的大小。

示例代码:

 def setHeadSizeHint(self):
        count = self.tableWidget.columnCount()
        width = int(self.tableWidget.viewport().width()/count) 
		
        for col in range(count ):
            horizontalHeaderItem = self.tableWidget.horizontalHeaderItem(col)
            horizontalHeaderItem.setSizeHint(QtCore.QSize(width ,20))

        self.tableWidget.horizontalHeader().setSectionResizeMode(QtWidgets.QHeaderView.ResizeToContents)

上面的示例代码是以表头的列来为例介绍的,实际上数据行的列也可以同样使用。

附加说明:
方法二比方法一复杂很多,但这个方法除了做等分列宽,还可以根据应用需要设定各列不同的宽度比例

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使QTableWidget的列宽度按比例显示并铺满整个表格,并且可以设置每列的宽度比例,可以使用QHeaderView的setSectionResizeModesetSectionResizeMode方法。以下是一个示例代码: ```python from PyQt5.QtWidgets import QApplication, QTableWidget, QTableWidgetItem, QHeaderView from PyQt5.QtCore import Qt app = QApplication([]) table = QTableWidget(3, 4) table.setHorizontalHeaderLabels(['Column 1', 'Column 2', 'Column 3', 'Column 4']) data = [ ['1', '2', '3', '4'], ['5', '6', '7', '8'], ['9', '10', '11', '12'] ] for row in range(len(data)): for col in range(len(data[row])): item = QTableWidgetItem(data[row][col]) table.setItem(row, col, item) header = table.horizontalHeader() header.setSectionResizeMode(QHeaderView.Stretch) # 设置列的调整模式为Stretch,按比例分配宽度 # 设置列宽度的比例 header.setSectionResizeMode(0, QHeaderView.Interactive) header.resizeSection(0, 3 * table.width() // 10) # 第一列占总宽度的3/10 header.setSectionResizeMode(1, QHeaderView.Interactive) header.resizeSection(1, 2 * table.width() // 10) # 第二列占总宽度的2/10 header.setSectionResizeMode(2, QHeaderView.Interactive) header.resizeSection(2, 4 * table.width() // 10) # 第三列占总宽度的4/10 header.setSectionResizeMode(3, QHeaderView.Interactive) header.resizeSection(3, 1 * table.width() // 10) # 第四列占总宽度的1/10 table.show() app.exec_() ``` 在上述代码,我们首先创建一个QTableWidget,并设置了3行4列的表格,并设置了水平表头。然后,我们添加了一些数据到表格。接下来,我们获取了表格的水平表头,并使用setSectionResizeMode方法将列的调整模式设置为Stretch,这样列宽度会按比例分配。 然后,我们使用setSectionResizeMode方法将每一列的调整模式设置为Interactive,以便手动调整列宽度。然后,使用resizeSection方法设置每一列的宽度比例,方法是根据总宽度计算所占比例。 请注意,这里使用的分配比例是根据表格宽度计算的。你可以根据实际需要调整每一列的比例。 运行代码后,你会看到表格的列宽度按比例显示并铺满整个表格,并且每一列的宽度比例也被正确设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值