如何在setFixedSize()之后再次调整主窗口的大小?

时间:2015-01-29 19:02:02

标签: python qt resize pyside qmainwindow

我想在使一些小部件不可见之后调整MainWindow(QMainWindow)的大小,反之亦然。我想阻止窗口调整大小。

def hideAndShowWidget(self):
        self.widgetObject.setVisible(not self.widgetObject.isVisible() )
        # change main window size here
        # ...
        self.setFixedSize(self.width(), self.height())

我的问题是,我第一次拨打setFixedSize()后无法更改窗口大小。我看了here我必须使用QWIDGETSIZE_MAX()删除约束,但我不知道如何使用它,我收到错误:

NameError: name 'QWIDGETSIZE_MAX' is not defined

2 个答案:

答案 0 :(得分:1)

使用sizeHint()。它包含小部件想要的大小。将固定大小精确设置为大小提示。

工作示例:

from PySide import QtGui

class Window(QtGui.QMainWindow):

    def __init__(self):
        super().__init__()
        self.setFixedSize(400, 300)

        widget = QtGui.QWidget()
        layout = QtGui.QVBoxLayout(widget)
        button = QtGui.QPushButton('Toggle visibility')
        button.clicked.connect(self.hideAndShowWidget)
        layout.addWidget(button)
        self.widgetObject = QtGui.QLabel('Test')
        layout.addWidget(self.widgetObject)
        self.setCentralWidget(widget)

    def hideAndShowWidget(self):
        self.widgetObject.setVisible(not self.widgetObject.isVisible() )
        # change main window size
        self.setFixedSize(self.sizeHint())


app = QtGui.QApplication([])
w = Window()
w.show()
app.exec_()

答案 1 :(得分:1)

我认为你的机制或多或少是正确的。您只需确保高度计算正确完成(即在窗口小部件的可见性发生变化之前)。

以下示例适用于我(仅在Linux上测试过):

from PySide import QtGui

class Window(QtGui.QWidget):
    def __init__(self):
        super(Window, self).__init__()
        self.widgetObject = QtGui.QTextEdit(self)
        self.button = QtGui.QPushButton('Hide Widget', self)
        self.button.clicked.connect(self.hideAndShowWidget)
        layout = QtGui.QVBoxLayout(self)
        layout.addWidget(self.button)
        layout.addWidget(self.widgetObject)
        self.setFixedSize(300, 200)

    def hideAndShowWidget(self):
        height = self.height()
        if self.widgetObject.isVisible():
            height -= self.widgetObject.height()
            self.widgetObject.setVisible(False)
            self.button.setText('Show Widget')
        else:
            height += self.widgetObject.height()
            self.widgetObject.setVisible(True)
            self.button.setText('Hide Widget')
        self.setFixedSize(self.width(), height)

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())