PyQt4 QTableWidget:设置行宽和列高以填充父窗口小部件

时间:2016-02-26 23:19:34

标签: python pyqt pyqt4 qtablewidget

我正在研究一个相当简单的PyQt程序,它基本上只是一个QTableWidget项目。我的目标是根据父QTableWidget的大小自动调整项目的宽度和高度。例如,如果我将窗口调整得更小,则项目的宽度和高度应减小,但应保留相同数量的项目,并且项目仍应完全填充父QTableWidget。如您所见,我目前正在使用setColumnWidthsetRowHeight手动设置宽度和高度。

我已经尝试了以下Stack Overflow问题中的建议,以及许多其他问题和网站,其中没有一个是我正在尝试做的事情。

1. How to make qtablewidgets columns assume the maximum space

2. pyqt how to maximize the column width in a tableview

以下是我目前使用的代码:

from PyQt4 import QtGui, QtCore
import PyQt4.Qt

class Window(QtGui.QWidget):
    def __init__(self, rows, columns):
        super(Window, self).__init__()
        self.setWindowState(QtCore.Qt.WindowMaximized)
        self.table = QtGui.QTableWidget(rows, columns, self)
        self.table.verticalHeader().setVisible(False)
        self.table.horizontalHeader().setVisible(False)

        # this is what I am currently using to set the row and column size
        for x in range(columns):
            self.table.setColumnWidth(x, 13)
        for x in range(rows):
            self.table.setRowHeight(x, 13)
        for row in range(rows):
            for column in range(columns):
                item = QtGui.QTableWidgetItem()
                self.table.setItem(row, column, item)

        layout = QtGui.QGridLayout(self)
        layout.addWidget(self.table, 0, 0, 1, 6)

        self.show()


def main():
    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window(54, 96)
    sys.exit(app.exec_())

if __name__ == "__main__":
    main()

我赞成这个问题的长度,但我想让我的问题非常明确。提前谢谢大家的帮助!

1 个答案:

答案 0 :(得分:0)

您可以使用QItemDelegate并覆盖sizeHint方法执行此操作。然后覆盖主要窗口小部件的__subresizeEvent方法,以便在窗口小部件调整大小时更新每个单元格的大小。

showEvent