2017-08-02 1458 views
0

希望我有一個簡單的問題。我想在窗口內按下一個按鈕關閉MDI subwindow,而不是使用頂部的x關閉它。我有另外一個文件,其中有幾個類,它們包含有關在MDI區域中打開的窗口的所有信息。我嘗試過self.close(),但這會使窗口打開並清除窗口中的所有窗口小部件。我將發佈下面的代碼,介紹如何將子窗口添加到MDI區域。感謝您的所有建議和幫助。PYQT5 Mdi子窗口關閉

subWindow = QtWidgets.QMdiSubWindow() 
New_Window = NewMDIWindow() 
subWindow.setWidget(New_Window) 
subWindow.setObjectName("New_Window") 
subWindow.setWindowTitle("New SubWindow") 
self.MainUi.mdiArea.addSubWindow(subWindow) 

subWindow.show() 
+0

什麼是'MainUi'和「自我」? – eyllanesc

回答

1

的X按鈕關閉QMdiSubWindow,不是刻在它的小部件,所以按鈕應關閉子窗口:

your_QPushButton.clicked.connect(your_QMdiSubWindow.close) 

完整的例子:

class MainWindow(QtWidgets.QMainWindow): 
    def __init__(self, parent=None): 
     QtWidgets.QMainWindow.__init__(self, parent) 
     self.centralwidget = QtWidgets.QWidget(self) 
     self.setCentralWidget(self.centralwidget) 
     self.centralwidget.setLayout(QtWidgets.QVBoxLayout(self.centralwidget)) 

     self.mdiArea = QtWidgets.QMdiArea(self.centralwidget) 
     self.centralwidget.layout().addWidget(self.mdiArea) 

     subWindow = QtWidgets.QMdiSubWindow(self) 

     widget = QtWidgets.QWidget() 
     widget.setLayout(QtWidgets.QVBoxLayout()) 
     btn = QtWidgets.QPushButton("close", widget) 
     widget.layout().addWidget(btn) 

     btn.clicked.connect(subWindow.close) 

     subWindow.setWidget(widget) 
     subWindow.setObjectName("New_Window") 
     subWindow.setWindowTitle("New SubWindow") 
     self.mdiArea.addSubWindow(subWindow) 


if __name__ == '__main__': 
    import sys 
    app = QtWidgets.QApplication(sys.argv) 
    w = MainWindow() 
    w.show() 
    sys.exit(app.exec_()) 
+0

謝謝你的迴應!這似乎有伎倆!當我關閉主窗口時,有任何想法爲什麼現在說「QWaitCondition:在線程仍在等待時銷燬」? – laxer

+0

如果代碼與我所示的代碼一樣,你不應該有這個問題,但給我的信息,我不能告訴你了。 – eyllanesc