如何确定第二个窗口是不是关闭

Posted

技术标签:

【中文标题】如何确定第二个窗口是不是关闭【英文标题】:How to find out if second window is closed如何确定第二个窗口是否关闭 【发布时间】:2017-09-25 14:00:53 【问题描述】:

我有一个应用程序在中途使用了其他人的另一个应用程序(两个应用程序都使用.ui 文件)。因此我在SecondWindow 中创建了第二个应用程序并隐藏MainWindow。现在我想在SecondWindow 关闭后再次显示MainWindow。我发现the solution in the answer 有效,但是现在SecondWindow 的背景是错误的,因为它使用了MainWindow 的背景。有没有办法在不使MainWindow 成为SecondWindow 的父级的情况下确定SecondWindow 是否在MainWindow 的班级中关闭,或者防止由父母身份引起的背景变化?

我当前的代码看起来有点像这样:

## Define main window class from template
path = os.path.dirname(os.path.abspath(__file__))
uiFile = os.path.join(path, 'test.ui')
Ui_MainWindow, QtBaseClass = uic.loadUiType(uiFile)

uiFile2 = os.path.join(path, 'monitor.ui')
WindowTemplate, SecondWindowClass = pg.Qt.loadUiType(uiFile2)

class SecondWindow(SecondWindowClass):

    def closeThis(self):
        self.close()
        self.parent().show()

    def __init__(self, parent):
        super(SecondWindow, self).__init__(parent)
        # ensure this window gets garbage-collected when closed
        self.setWindowTitle('pyqtgraph example: Qt Designer')
        self.ui = WindowTemplate()
        self.ui.setupUi(self)
        self.show()

class MainWindow(QtGui.QMainWindow, Ui_MainWindow):

     def showSecond(self):
        self.second.show()
        self.hide()

     def __init__(self):
        QtGui.QMainWindow.__init__(self)
        Ui_MainWindow.__init__(self)
        self.ui=uic.loadUi(uiFile, self)
        self.setupUi(self)
        self.show()
        self.second = SecondWindow(self)
        self.second.hide()
        self.ui.end_button.clicked.connect(lambda x:self.showSecond())

win = MainWindow()
if __name__ == '__main__':
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
       QtGui.QApplication.instance().exec_()

【问题讨论】:

【参考方案1】:

第二个窗口实际上不必是第一个窗口的子窗口。

所以你应该可以做这样的事情:

class SecondWindow(SecondWindowClass):    
    def closeThis(self):
        self.close()
        self.first.show()

    def __init__(self, first):
        super(SecondWindow, self).__init__()
        self.first = first
        ...

class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
     def showSecond(self):
        self.second.show()
        self.hide()

     def __init__(self):
        ...
        self.second = SecondWindow(self)
        self.second.hide()

【讨论】:

以上是关于如何确定第二个窗口是不是关闭的主要内容,如果未能解决你的问题,请参考以下文章

打开第二个窗口后隐藏主窗口?另外,当第二个窗口被用户关闭时,主窗口如何重新出现?

PyQt5如何在第一个窗口关闭时更改第二个窗口

安卓 如何载入一个新窗口如何关闭窗口和向另一个窗口传值

按下保存按钮pyqt5后关闭第二个小部件

如何关闭 WPF 中隐藏的主窗口?

在多个窗口上处理视图 - 第二个窗口关闭时 removeFromSuperView 的问题