2017-09-25 64 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()