Как определить событие закрытия диалогового окна?

Всем привет.

Я делаю приложение GUI, используя python3.4, PyQt5 в Windows 7.

Применение является очень образцовым. Пользователь нажимает кнопку главного окна, появляется диалоговое окно с информацией. И когда пользователь нажимает кнопку закрытия диалогового окна (кнопка X окна), система показывает сообщение подтверждения. Это все.

Вот мой код.

# coding: utf-8 import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QDialog, QLabel class mainClass(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): openDlgBtn = QPushButton("openDlg", self) openDlgBtn.clicked.connect(self.openChildDialog) openDlgBtn.move(50, 50) self.setGeometry(100, 100, 200, 200) self.show() def openChildDialog(self): childDlg = QDialog(self) childDlgLabel = QLabel("Child dialog", childDlg) childDlg.resize(100, 100) childDlg.show() if __name__ == "__main__": app = QApplication(sys.argv) mc = mainClass() sys.exit(app.exec_()) 

Результат экрана …

введите описание изображения здесь

введите описание изображения здесь

В этой ситуации я добавил этот код в класс mainClass.

 def closeEvent(self, event): print("X is clicked") 

Этот код работает только при закрытии главного окна. Но я хочу, чтобы функция closeEvent работает, когда childDlg закрывается. Не главное окно.

Что мне делать?

Вы добавили, я думаю, метод closeEvent в классе mainClass. Таким образом, вы повторно реализовали метод closeOvent вашего QMainwindow, а не метод closeEvent вашего childDlg. Чтобы сделать это, вы должны подклассифицировать свой chilDlg следующим образом:

 # coding: utf-8 import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QDialog, QLabel class ChildDlg(QDialog): def closeEvent(self, event): print("X is clicked") class mainClass(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): openDlgBtn = QPushButton("openDlg", self) openDlgBtn.clicked.connect(self.openChildDialog) openDlgBtn.move(50, 50) self.setGeometry(100, 100, 200, 200) self.show() def openChildDialog(self): childDlg = ChildDlg(self) childDlgLabel = QLabel("Child dialog", childDlg) childDlg.resize(100, 100) childDlg.show() if __name__ == "__main__": app = QApplication(sys.argv) mc = mainClass() sys.exit(app.exec_())