QTableWidget 扩展列以填充最后一列固定宽度

Posted

技术标签:

【中文标题】QTableWidget 扩展列以填充最后一列固定宽度【英文标题】:QTableWidget Expand Columns to Fill With Last Column Fixed Width 【发布时间】:2020-01-03 15:49:17 【问题描述】:

我正在尝试一些我认为很简单的事情,但就是找不到方法来做到这一点。 提供的图像展示了我所追求的。它本质上只是一个具有以下行为的 QTableWidget:

填满可用空间。 右侧有一个固定宽度列。 我希望能够手动调整其余列的大小(因此它们必须按比例拉伸以填充所有空间)。

我尝试过的事情:

设置 setStretchLastSection(True)。这会填满空间,但如果设置了它,您将无法控制其宽度。 覆盖 resizeEvent 并手动计算和设置所有内容。这似乎是一种非常混乱的做事方式,这通常意味着有一种更简单的方式。

有没有一种简单的方法可以做到这一点?

【问题讨论】:

【参考方案1】:

您始终可以使用self.my_table.verticalHeader().setSectionResizeMode(QHeaderView.ResizeToContents) ResizeToContents 所有列,然后将固定宽度应用于最后一列

【讨论】:

从文档here 中可以看到,设置QHeaderView.ResizeToContents 表示“用户无法更改大小或以编程方式更改大小。”【参考方案2】:

我设法得到了一些有用的东西

self.myTable.horizontalHeader().setSectionResizeMode(0, QtWidgets.QHeaderView.Interactive)
self.myTable.horizontalHeader().setSectionResizeMode(1, QtWidgets.QHeaderView.Stretch)
self.myTable.horizontalHeader().setSectionResizeMode(2, QtWidgets.QHeaderView.Fixed)

一般规则是将所有标题设置为Interactive,倒数第二个设置为Stretch,最后一个设置为Fixed

【讨论】:

以上是关于QTableWidget 扩展列以填充最后一列固定宽度的主要内容,如果未能解决你的问题,请参考以下文章

如何填充一列以区分 Impala 组中的一组行与其他行?

QTableView / QTableWidget:使用 Qt 设计器拉伸最后一列

合并第二列到最后一列以获取第一列中的重复项

QTableWidget、Cellwidget、QLabel

如何用我自己的代码对 QTableWidget 进行排序?

PyQt5 QTableWidget 仅显示第一行和第一列