PYQT5 Mdi子窗口关闭

时间:2017-08-02 21:15:22

标签: python python-3.x pyqt pyqt5 mdichild

希望我有一个简单的问题。我想在窗口内按一下按钮关闭MDI subwindow,而不是通过顶部的x关闭它。我有另一个文件,其中包含几个类,其中包含有关在MDI区域中打开的窗口的所有信息。我尝试了self.close(),但是窗口打开并清除了窗口中的所有小部件。我将发布以下代码,以了解如何将子窗口添加到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()

1 个答案:

答案 0 :(得分: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_())