На этом шаге мы рассмотрим методы, используемые для выполнения указанных операций.
При закрытии окна нажатием кнопки Закрыть в его заголовке или вызовом метода close() в коде выполняется метод closeEvent (self, <event>). Через параметр <event> доступен экземпляр класса QCloseEvent. Чтобы предотвратить закрытие окна, необходимо вызвать метод ignore() через объект события, в противном случае - метод accept().
В качестве примера по нажатию кнопки Закрыть выведем стандартное диалоговое окно с запросом подтверждения закрытия окна. Если пользователь нажимает кнопку Yes, закроем окно, а если щелкает кнопку No или просто закрывает диалоговое окно, то прервем закрытие окна.
# -*- coding: utf-8 -*- from PyQt5 import QtWidgets class MyWindow(QtWidgets.QWidget): def __init__ (self, parent = None): QtWidgets.QWidget.__init__(self, parent) self.resize(300, 100) def closeEvent(self, e): result = QtWidgets.QMessageBox.question(self, "Подтверждение закрытия окна", "Вы действительно хотите закрыть окно?", QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No, QtWidgets.QMessageBox.No) if result == QtWidgets.QMessageBox.Yes: e.accept() QtWidgets.QWidget.closeEvent(self, e) else: e.ignore() if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) window = MyWindow() window.show() sys.exit(app.exec_())
Результат работы приложения изображен на рисунке 1.
Рис.1. Результат работы приложения
Со следующего шага мы начнем рассмотривать события клавиатуры.