2017-09-25 68 views
1

我有一个应用程序使用其他应用程序从中途通过其他应用程序(两个应用程序使用.ui文件)。因此,我在SecondWindow中创建第二个应用程序,并隐藏MainWindow。现在我想在SecondWindow关闭后再次显示MainWindow。我发现the solution in the answer的作品,但现在SecondWindow的背景是错误的,因为它使用了MainWindow的背景。有没有办法找出SecondWindow是否从MainWindow这个班级关闭,而不是让MainWindow成为SecondWindow的父母,还是为了防止由于生育而导致的背景变化?如何找出第二个窗口是否关闭

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

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