PySide - PyQt:如何将QTableWidget列宽设置为可用空间的比例?

Adr*_*enW 11 python user-interface qt pyqt pyside

我正在使用PySide开发一个计算机应用程序,我正在使用QTableWidget.假设我的表有3列,但它们包含的数据非常不同,例如(对于每一行)第一列中的长句,然后是最后两列中的3位数字.我想让我的表调整大小以便根据数据调整其大小,或者至少能够将列大小设置为(例如)可用空间的70/15/15%.

做这个的最好方式是什么 ?

table.horizontalHeader().setResizeMode(QHeaderView.Stretch)在阅读完这个问题之后尝试过,但它会生成相同大小的3列.

我还要table.horizontalHeader().setResizeMode(QHeaderView.ResizeToContents)感谢Fabio评论,但它没有根据需要填补所有可用空间.

无论是Interactive,Fixed,Stretch,ResizeToContentsQHeaderView文档似乎给我我需要什么(见第二编辑).

任何帮助将不胜感激,即使它是Qt/C++!非常感谢你.


编辑:我找到了一种解决方法,但它仍然不是我想要的:

header = table.horizontalHeader()
header.setResizeMode(QHeaderView.ResizeToContents)
header.setStretchLastSection(True)
Run Code Online (Sandbox Code Playgroud)

如果存在一种setStretchFirstSection方法会更好,但不幸的是似乎没有一种方法.


编辑2:

表中唯一可以修改的是最后一列,用户可以在其中输入一个数字.红色箭头表示我想要的东西.

这是发生的事情 Stretch伸展

这是发生的事情 ResizeToContents ResizeToContents

ekh*_*oro 31

这可以通过为每列设置调整大小模式来解决.第一部分必须拉伸以占用可用空间,而最后两部分只是调整其内容:

PyQt4中:

header = self.table.horizontalHeader()
header.setResizeMode(0, QtGui.QHeaderView.Stretch)
header.setResizeMode(1, QtGui.QHeaderView.ResizeToContents)
header.setResizeMode(2, QtGui.QHeaderView.ResizeToContents)
Run Code Online (Sandbox Code Playgroud)

PyQt5:

header = self.table.horizontalHeader()       
header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch)
header.setSectionResizeMode(1, QtWidgets.QHeaderView.ResizeToContents)
header.setSectionResizeMode(2, QtWidgets.QHeaderView.ResizeToContents)
Run Code Online (Sandbox Code Playgroud)

  • 在qt5中,此函数更改为setSectionResizeMode() (5认同)
  • 我不知道我可以为每一列选择不同的 `QHeaderView`。这很好用,尽管我将最后两列更改为“固定”,然后使用“self.table.setColumnWidth(index, width)”添加了最小宽度(更适合我的情况) (2认同)

kox*_*oxx 7

如前所述,您可以通过设置每列的调整大小模式来做到这一点。但是,如果您有很多列,这可能是很多代码。我这样做的方法是将“常规”调整大小模式设置为“ResizeToContent”,而不是将一个(或多个)列设置为“拉伸”!

这是代码:

PyQt4:

header = self.table.horizontalHeader()
header.setResizeMode(QtGui.QHeaderView.ResizeToContents)
header.setResizeMode(0, QtGui.QHeaderView.Stretch)
Run Code Online (Sandbox Code Playgroud)

PyQt5:

header = self.table.horizontalHeader()
header.setSectionResizeMode(QtWidgets.QHeaderView.ResizeToContents)       
header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch)
Run Code Online (Sandbox Code Playgroud)


小智 5

PyQt4中

header = self.table.horizontalHeader()
header.setResizeMode(0, QtGui.QHeaderView.Stretch)
header.setResizeMode(1, QtGui.QHeaderView.ResizeToContents)
header.setResizeMode(2, QtGui.QHeaderView.ResizeToContents)
header.setResizeMode(3, QtGui.QHeaderView.Stretch)
Run Code Online (Sandbox Code Playgroud)

PyQt5

header = self.table.horizontalHeader()       
header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch)
header.setSectionResizeMode(1, QtWidgets.QHeaderView.ResizeToContents)
header.setSectionResizeMode(2, QtWidgets.QHeaderView.ResizeToContents)
header.setSectionResizeMode(3, QtWidgets.QHeaderView.Stretch)
Run Code Online (Sandbox Code Playgroud)