2017-08-02 28 views
0

うまくいけば簡単な質問があります。 MDI subwindowを閉じるには、ウィンドウ内のボタンを押すのではなく、上部にあるxを閉じてください。私はMDIエリアで開いているウィンドウに関するすべての情報を持ついくつかのクラスを持つ別のファイルを持っています。私はself.close()を試しましたが、それはウィンドウを開いたままにし、ウィンドウからすべてのウィジェットをクリアします。 MDIエリアにサブウィンドウを追加する方法について、以下のコードを投稿します。皆さんの助言と助けをありがとう。ボタンはサブウィンドウを閉じる必要がありますので、Xボタンは、ウィジェットはそれに刻まれていない、QMdiSubWindowを閉じ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

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:Destroyedが発生しました」と言っている理由は何ですか? – laxer

+0

コードが私が示しているもののようなものなら、あなたはその問題を持ってはいけないが、私にはもう話せない情報を与えてください。 – eyllanesc

関連する問題