Как определить событие закрытия диалогового окна?
Всем привет.
Я делаю приложение 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 закрывается. Не главное окно.
Что мне делать?
- PyQt запоминает состояния / элементы пользовательского интерфейса
- Как удалить стандартное меню из контекстного меню QTextEdit
- От QVariant до Integer и String
- Как рисовать поверх QListWidget в eventfilter в PyQt4 / PySide?
- Симулировать движение мыши в pyqt
Вы добавили, я думаю, метод 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_())
- Ошибка загрузки закрытого ключа с помощью OpenSSL.crypto.Error:
- Добавить кортеж в определенную ячейку кадра данных pandas
- Как создать текст вместе с кривой, используя QPainterPath
- Как фильтровать элементы PyQt QCombobox на основе ввода текста?
- Планирование в реальном времени с помощью Matplotlib, PyQt и Threading заканчивается сбой python
- Python. Я получаю ошибку при множественном наследовании
- Пытается производить моноширинный вывод в браузере pyqt
- PyQt: фильтр флажка QFileSystemModel
- Как связать кнопки в Qt Quick to Python PyQt 5
- QDialog не открывается из главного окна (pyQt)
- Свернуть (rollup) в заголовок (1 пиксель)