在 PyQt 中调整 QTableWidget 中标题的高度

Posted

技术标签:

【中文标题】在 PyQt 中调整 QTableWidget 中标题的高度【英文标题】:Resize the height of the header in QTableWidget in PyQt 【发布时间】:2016-05-27 06:06:19 【问题描述】:

我试图在我的应用程序中包含一个QTableWidget,它有四列,我需要根据窗口大小将标题中的列添加到stretch。目前,列仅占一定宽度,不会延伸到窗口。

这是我的问题的最小可验证示例:

import sys
from PyQt5 import QtWidgets

class MyTable(QtWidgets.QTableWidget):
    def __init__(self, *args):
        QtWidgets.QTableWidget.__init__(self, *args)
        self.setheader()
        self.resizeColumnsToContents()
        self.resizeRowsToContents()

    def setheader(self):
        self.setHorizontalHeaderLabels(['Label 1', 'Label 2', 'Label 3'])    

def main(args):
    app = QtWidgets.QApplication(args)
    table = MyTable(5, 3)
    table.show()
    sys.exit(app.exec_())


if __name__ == "__main__":
    main(sys.argv)

【问题讨论】:

【参考方案1】:

如果您要重新实现QTableWidget,这是实现拉伸效果所需的指令:

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

你从QTableWidget 调用QHeaderView 并给它Stretch 指令。下面的例子是一个有效的实现:

import sys
from PyQt5 import QtWidgets

class MyTable(QtWidgets.QTableWidget):
    def __init__(self, *args):
        QtWidgets.QTableWidget.__init__(self, *args)
        self.setheader()
        self.resizeColumnsToContents()
        self.resizeRowsToContents()

    def setheader(self):
        self.setHorizontalHeaderLabels(['Label 1', 'Label 2', 'Label 3'])
        self.horizontalHeader().setSectionResizeMode(QtWidgets.QHeaderView.Stretch)
        #self.horizontalHeader().setStretchLastSection(True) # This is another possible option


def main(args):
    app = QtWidgets.QApplication(args)
    table = MyTable(5, 3)
    table.show()
    sys.exit(app.exec_())


if __name__ == "__main__":
    main(sys.argv)

,结果如下:

在上面的代码示例中,还有另一种可能性,它可以为您提供不同风格的相同目标。它已被注释,但你应该使用它(而不是第一条指令):

self.horizontalHeader().setStretchLastSection(True)

,只有最后一列会拉伸:

【讨论】:

我使用了 setSectionResizeMode。奇迹般有效。但我现在需要的是根据单元格内容调整列宽。虽然我用过 resizeCoulmnToContents() 和 resizeRowsToContents,但还是不行 @North 这个问题刚刚被标记为离题(尽管从我的角度来看,它不是)而且似乎问题和答案都受到了某种“报复”的反对。我认为您应该针对您的新问题提出另一个问题。尝试放置一个最小可验证示例(当问题被认为是低质量时,通常会被标记为离题)。随意在我的答案中使用代码。我将编辑此问题以包含一个最少可验证的示例(因为它是一个相关问题)。如果您不满意,请随时重新编辑或恢复我的更改。

以上是关于在 PyQt 中调整 QTableWidget 中标题的高度的主要内容,如果未能解决你的问题,请参考以下文章

调整列宽以适应 QTableWidget pyqt

在 pyqt5 QTableWidget 中应用样式:已选择

如何在pyqt中更改Qtablewidget的特定单元格背景颜色

在 QTableWidget PyQt5 中突出显示单元格

在pyqt中隐藏qtablewidget中选定单元格的边框?

如何在 PyQt5 中捕获 QTableWidget 上的左右鼠标单击事件?