PyQt:如何设置窗口大小以匹配窗口小部件?

时间:2016-09-20 14:32:08

标签: python pyqt pyqt4

我正在编写一个包含菜单和中央窗口小部件的pyqt应用程序(一个表格小部件,其行和列看起来像一张电子表格)。我想将封闭窗口的大小设置为小部件的大小。出于美观原因,我不想将其修复到一定的尺寸和边界周围的浪费空间。如何提取表格小部件的整体宽度?我尝试使用tabeleWidget.width(),但它给了我看起来像一个单元格的宽度。我正在使用pyqt4和python 2.7。

1 个答案:

答案 0 :(得分:2)

我不确定是否有一种简单的方法可以获得表格的大小,但是这样的话怎么样?

from PyQt4 import QtCore, QtGui

class MainWindow(QtGui.QMainWindow):
    def __init__(self, table_rows, table_cols, **kwargs):
        super(MainWindow, self).__init__(**kwargs)
        self.table = QtGui.QTableWidget(table_rows, table_cols)
        self.table.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.table.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.table.verticalHeader().sectionResized.connect(self.fitToTable)
        self.table.horizontalHeader().sectionResized.connect(self.fitToTable)
        self.setCentralWidget(self.table)
        self.fitToTable()

    @QtCore.pyqtSlot()
    def fitToTable(self):
        x = self.table.verticalHeader().size().width()
        for i in range(self.table.columnCount()):
            x += self.table.columnWidth(i)

        y = self.table.horizontalHeader().size().height()
        for i in range(self.table.rowCount()):
            y += self.table.rowHeight(i)

        self.setFixedSize(x, y)


if __name__ == '__main__':
    app = QtGui.QApplication([])
    win = MainWindow(4, 5)
    win.show()
    app.exec_()

此示例计算表的大小,并将窗口大小固定为这些值。如果用户手动调整任何行或列的大小,它还会调整窗口大小以适应。