【问题标题】:How can I resize the window after a widget is hidden while still allowing the window to be resized?如何在隐藏小部件后调整窗口大小,同时仍允许调整窗口大小?
【发布时间】:2016-06-01 06:08:33
【问题描述】:

这是一个简单的例子:

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()

当按钮被切换时,框架会适当地显示/隐藏。我意识到如果我将MainWindows sizeConstraint 设置为SetFixedSize 如下:

layout.setSizeConstraint(QtGui.QLayout.SetFixedSize)

窗口将按照我的意愿调整大小。但是,我希望用户仍然能够调整窗口大小,SetFixedSize 不允许我这样做。

因此,如何在实现用户可调整大小的窗口的同时根据其内容调整大小?

【问题讨论】:

    标签: qt pyqt qt4 pyqt4


    【解决方案1】:

    根据here 找到的对话,我能够让它工作。该解决方案涉及在显示/隐藏框架后添加QTimerQTimer 调用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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-15
      • 1970-01-01
      • 2011-05-18
      • 2018-04-26
      • 2019-05-15
      • 1970-01-01
      相关资源
      最近更新 更多