Шаг 59.
Библиотека PyQt5.
Обработка сигналов и событий. События окна. Предотвращение закрытия окна

    На этом шаге мы рассмотрим методы, используемые для выполнения указанных операций.

    При закрытии окна нажатием кнопки Закрыть в его заголовке или вызовом метода 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. Результат работы приложения

    Со следующего шага мы начнем рассмотривать события клавиатуры.




Предыдущий шаг Содержание Следующий шаг