Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 在窗口小部件隐藏后,如何调整窗口大小,同时仍允许调整窗口大小?_Qt_Pyqt_Qt4_Pyqt4 - Fatal编程技术网

Qt 在窗口小部件隐藏后,如何调整窗口大小,同时仍允许调整窗口大小?

Qt 在窗口小部件隐藏后,如何调整窗口大小,同时仍允许调整窗口大小?,qt,pyqt,qt4,pyqt4,Qt,Pyqt,Qt4,Pyqt4,下面是一个简单的例子: from PyQt4 import QtCore, QtGui import sys class MainWindow(QtGui.QWidget): def __init__(self): self.app = QtGui.QApplication(sys.argv) super(MainWindow, self).__init__() self.button = QtGui.QPushButton('Show

下面是一个简单的例子:

from PyQt4 import QtCore, QtGui
import sys

class MainWindow(QtGui.QWidget):
    def __init__(self):
        self.app = QtGui.QApplication(sys.argv)
        super(MainWindow, self).__init__()

        self.button = QtGui.QPushButton('Show/Hide')
        self.button.setCheckable(True)
        self.frame = QtGui.QFrame()
        self.frame.setFixedHeight(100)
        layout = QtGui.QVBoxLayout()
        layout2 = QtGui.QVBoxLayout()
        self.setLayout(layout)
        self.frame.setLayout(layout2)

        layout.addWidget(self.button)
        layout.addWidget(self.frame)
        layout.addStretch(1)
        layout2.addWidget(QtGui.QLabel('Yoyoyo'))

        self.button.toggled.connect(self.clickAction)

    def startup(self):
        self.show()
        sys.exit(self.app.exec_())

    def clickAction(self):
        checked = self.button.isChecked()
        if checked:
            self.frame.show()
        else:
            self.frame.hide()
if __name__ == "__main__":
    myApp = MainWindow()
    myApp.startup()
切换按钮时,框架将适当显示/隐藏。我意识到如果我将
main窗口设置为
SetFixedSize
,如下所示:

layout.setSizeConstraint(QtGui.QLayout.SetFixedSize)
窗口将按我想要的大小调整。但是,我希望用户仍然能够调整窗口大小,这是
SetFixedSize
不允许的


因此,我如何既能实现用户可调整大小的窗口,又能根据其内容调整其大小?

根据对话发现,我能够实现这一点。解决方案是在显示/隐藏帧后添加一个
QTimer
QTimer
调用
resizeMe
方法,该方法也定义如下

from PyQt4 import QtCore, QtGui
import sys

class MainWindow(QtGui.QWidget):
    def __init__(self):
        self.app = QtGui.QApplication(sys.argv)
        super(MainWindow, self).__init__()

        self.button = QtGui.QPushButton('Show/Hide')
        self.button.setCheckable(True)
        self.frame = QtGui.QFrame()
        self.frame.setFixedHeight(100)
        self.layout = layout = QtGui.QVBoxLayout()
        layout2 = QtGui.QVBoxLayout()
        self.setLayout(layout)
        self.frame.setLayout(layout2)

        layout.addWidget(self.button)
        layout.addWidget(self.frame)
        layout.addStretch(1)
        layout2.addWidget(QtGui.QLabel('Yoyoyo'))

        self.button.toggled.connect(self.clickAction)

    def startup(self):
        self.show()
        sys.exit(self.app.exec_())

    def clickAction(self):
        checked = self.button.isChecked()
        if checked:
            self.frame.show()
        else:
            self.frame.hide()
        QtCore.QTimer.singleShot(0, self.resizeMe)

    def resizeMe(self):
        self.resize(self.minimumSizeHint())
if __name__ == "__main__":
    myApp = MainWindow()
    myApp.startup()