【问题标题】:PyQt: How to hide QMainWindowPyQt:如何隐藏 QMainWindow
【发布时间】:2014-04-27 14:37:48
【问题描述】:

单击 Dialog_01 的按钮隐藏其窗口并打开 Dialog_02。单击 Dialog_02 的按钮应关闭其窗口并取消隐藏 Dialog_01。如何实现?

import sys, os
from PyQt4 import QtCore, QtGui    

class Dialog_02(QtGui.QMainWindow):
    def __init__(self):
        super(Dialog_02, self).__init__()

        myQWidget = QtGui.QWidget()
        myBoxLayout = QtGui.QVBoxLayout()       

        Button_02 = QtGui.QPushButton("Close THIS and Unhide Dialog 01")
        Button_02.clicked.connect(self.closeAndReturn)
        myBoxLayout.addWidget(Button_02)

        myQWidget.setLayout(myBoxLayout)
        self.setCentralWidget(myQWidget)
        self.setWindowTitle('Dialog 02')

    def closeAndReturn(self):
        self.close()

class Dialog_01(QtGui.QMainWindow):
    def __init__(self):
        super(Dialog_01, self).__init__()

        myQWidget = QtGui.QWidget()
        myBoxLayout = QtGui.QVBoxLayout()       

        Button_01 = QtGui.QPushButton("Hide THIS and Open Dialog 02")
        Button_01.clicked.connect(self.callAnotherQMainWindow)
        myBoxLayout.addWidget(Button_01)        

        myQWidget.setLayout(myBoxLayout)
        self.setCentralWidget(myQWidget)
        self.setWindowTitle('Dialog 01')

    def callAnotherQMainWindow(self):
        self.hide()
        self.dialog_02 = Dialog_02()
        self.dialog_02.show()
        self.dialog_02.raise_()

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    dialog_1 = Dialog_01()
    dialog_1.show()
    sys.exit(app.exec_())

【问题讨论】:

    标签: python pyqt qtgui qmainwindow


    【解决方案1】:

    使第一个窗口成为第二个窗口的父窗口:

    class Dialog_02(QtGui.QMainWindow):
        def __init__(self, parent):
            super(Dialog_02, self).__init__(parent)
            # ensure this window gets garbage-collected when closed
            self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
        ...    
    
        def closeAndReturn(self):
            self.close()
            self.parent().show()
    
    class Dialog_01(QtGui.QMainWindow):
        ...
    
        def callAnotherQMainWindow(self):
            self.hide()
            self.dialog_02 = Dialog_02(self)
            self.dialog_02.show()
    

    如果您希望每次都显示相同的对话框,请执行以下操作:

        def callAnotherQMainWindow(self):
            self.hide()
            if not hassattr(self, 'dialog_02'):
                self.dialog_02 = Dialog_02(self)
            self.dialog_02.show()
    

    hide() 子窗口,而不是关闭它。

    【讨论】:

    • @ekhumoro,创建Dialog_02的实例时,parent需要是Dialog_01,还是Dialog_01的实例?
    • @CheynShmuel。我需要成为一个实例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-17
    • 1970-01-01
    相关资源
    最近更新 更多