Перехват кнопки "Закрыть"
Перехват кнопки "Закрыть"
Возможно ли перехватить закрытие главного окна Аксиомы кнопкой "Закрыть" (крестиком), а далее в диалоге дать возможность оператору выбрать, прекращать работу или отказаться от закрытия?
Re: Перехват кнопки "Закрыть"
Здравствуйте!
Да, технически возможно перехватить закрытие главного окна с помощью установки event-фильтра на главное окно приложения.
Однако мы не рекомендуем использовать такой подход в реальных условиях: он может конфликтовать с внутренней логикой Аксиомы,
в результате чего пользователь увидит два диалоговых окна с вопросом о закрытии подряд — что создаст неудобства и путаницу.
Данный скрипт предлагается запустить один раз из редактора кода python:
Да, технически возможно перехватить закрытие главного окна с помощью установки event-фильтра на главное окно приложения.
Однако мы не рекомендуем использовать такой подход в реальных условиях: он может конфликтовать с внутренней логикой Аксиомы,
в результате чего пользователь увидит два диалоговых окна с вопросом о закрытии подряд — что создаст неудобства и путаницу.
Данный скрипт предлагается запустить один раз из редактора кода python:
Код: Выделить всё
import axipy
from axipy import *
from PySide2.QtCore import *
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()
return False
def uninstall(self):
mainwindow.widget.removeEventFilter(self)
windowWatcher = CloseFilter()
Re: Перехват кнопки "Закрыть"
Спасибо, Дмитрий! Как я понял, скрипт запускается один раз и далее его действие распространяется на весь сеанс работы с Аксиомой. Действительно, при закрытии главного окна возникают повторные выводы диалога. Но у меня несколько другая ситуация: после выполнения основного фрагмента техпроцесса пользователь анализирует результаты (а это может занять некоторое время) и, если он удовлетворен ими, иногда забывает запустить завершающий фрагмент и выходит из Аксиомы. Это приводит к тому, что работу приходится выполнять заново. Тут-то и надо перехватить закрытие главного окна: после выполнения основного фрагмента включить перехват, а при выполнении завершающего выключить.
Для проверки я, на основе Вашего скрипта, написал свой тестовый, прикрепляю его к сообщению. Вроде бы все работает, но поскольку это mainwindow, опасаюсь, нет ли каких подводных камней?
И еще: можно ли аналогичным образом перехватывать действие кнопки "Закрыть все" меню "Файл"?
(Уверен, что можно, но что-то никак не получается
).
Для проверки я, на основе Вашего скрипта, написал свой тестовый, прикрепляю его к сообщению. Вроде бы все работает, но поскольку это mainwindow, опасаюсь, нет ли каких подводных камней?
И еще: можно ли аналогичным образом перехватывать действие кнопки "Закрыть все" меню "Файл"?
(Уверен, что можно, но что-то никак не получается

- Вложения
-
- my_close_filter.py
- (1.33 КБ) 11 скачиваний