#перехват события закрытия главного окна с помощью фильтра событий
import axipy
from axipy import *
from PySide2.QtCore import *
from PySide2 import QtWidgets

class CloseFilter(QObject):
    def __init__(self) -> None:
        super().__init__()
        mainwindow.widget.installEventFilter(self)
        
    def eventFilter(self, watched, event) -> False:
        if event.type() == QEvent.Close:
            res = axipy.show_dialog('Закрыть?', 'Заголовок',
                        icon=DlgIcon.QUESTION,
                        default_button = DlgButtons.CANCEL,
                        buttons = DlgButtons.YES_NO_CANCEL)
            if res != DlgButtons.YES:
                event.ignore()
            else:
                window.close()
        return False
        
    def uninstall(self):
        mainwindow.widget.removeEventFilter(self)

def filter_remove():
    windowWatcher.uninstall()
    window.close()

windowWatcher = CloseFilter()

window = QtWidgets.QWidget()
window.setWindowTitle("Отключение фильтра")
window.resize(300, 70)
btnQuit = QtWidgets.QPushButton("&Отключить")
vbox = QtWidgets.QVBoxLayout()
vbox.addWidget(btnQuit)
window.setLayout(vbox)
btnQuit.clicked.connect(filter_remove)

window.show()