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

新手上路,请多包涵

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

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

我试过 table.horizontalHeader().setResizeMode(QHeaderView.Stretch) 阅读 这个问题 后,但它使 3 列大小相同。

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

Neither Interactive , Fixed , Stretch , ResizeToContents from the QHeaderView documentation seem to give me what I need (see second edit).

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


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

 header = table.horizontalHeader()
header.setResizeMode(QHeaderView.ResizeToContents)
header.setStretchLastSection(True)

如果有一个 setStretchFirstSection 方法会更好,但不幸的是似乎没有。


编辑 2:

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

这是 Stretch 发生的事情 拉紧

这是 ResizeToContents 发生的事情 调整内容

原文由 AdrienW 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.6k
2 个回答

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

PyQt5:

 header = self.table.horizontalHeader()
header.setSectionResizeMode(0, QHeaderView.Stretch)
header.setSectionResizeMode(1, QHeaderView.ResizeToContents)
header.setSectionResizeMode(2, QHeaderView.ResizeToContents)

PyQt6/PyQt5:

 header = self.table.horizontalHeader()
header.setSectionResizeMode(0, QHeaderView.ResizeMode.Stretch)
header.setSectionResizeMode(1, QHeaderView.ResizeMode.ResizeToContents)
header.setSectionResizeMode(2, QHeaderView.ResizeMode.ResizeToContents)

PyQt4:

 header = self.table.horizontalHeader()
header.setResizeMode(0, QHeaderView.Stretch)
header.setResizeMode(1, QHeaderView.ResizeToContents)
header.setResizeMode(2, QHeaderView.ResizeToContents)

原文由 ekhumoro 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

这是代码:

PyQt4:

 header = self.table.horizontalHeader()
header.setResizeMode(QtGui.QHeaderView.ResizeToContents)
header.setResizeMode(0, QtGui.QHeaderView.Stretch)

PyQt5:

 header = self.table.horizontalHeader()
header.setSectionResizeMode(QtWidgets.QHeaderView.ResizeToContents)
header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch)

原文由 koxx 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏