在 PyQt 中调整 QTableWidget 中 header 的高度

Resize the height of the header in QTableWidget in PyQt

我想在我的应用程序中包含一个包含四列的 QTableWidget,并且我需要根据 window 大小从 header 到 stretch 中的列。目前,列只占用一定的宽度,不会延伸到 window.

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

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)

如果您要重新实现一个 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)

,结果是:

在上面的代码示例中,还有另一种可能性,它会给你相同的 objective 但风格不同。它被评论了,但你应该使用它(而不是第一条指令):

self.horizontalHeader().setStretchLastSection(True)

,只有最后一列会拉伸: