Этот вопрос уже имеет ответ здесь:
Когда пользователь нажимает завершение Button
то, что я создал, некоторые задачи выполняются перед выходом. Однако, если пользователь нажимает [X]
кнопка в верхнем правом из окна для закрытия окна я не могу выполнить эти задачи.
Как может я переопределять то, что происходит, когда пользователь нажимает [X]
кнопка?
Похоже, что ваше окно сохранения должно быть модальным.
Если это основное окно сохранения, зачем вы изобретаете колесо?
Tk
имеет tkFileDialog
для этой цели.
Если вы хотите переопределить стандартное поведение уничтожения окна, вы можете просто сделать:
root.protocol('WM_DELETE_WINDOW', doSomething) # root is your root window
def doSomething():
# check if saving
# if not:
root.destroy()
Таким образом, вы можете перехватить вызов destroy()
, когда кто-то закрывает окно (любым способом), и делать то, что вам нравится.
Вы ищете команду wm_protocol
, задавая ей «WM_DELETE_WINDOW»
в качестве протокола для привязки. Он позволяет вам определить процедуру, вызываемую, когда оконный менеджер закрывает окно (что происходит, когда вы щелкаете [x]
).
Я нашел ссылку на Tkinter здесь . Он не идеален, но охватывает почти все, что мне когда-либо было нужно. Я считаю, что раздел 30.3 (Типы событий) помогает, он сообщает нам, что для виджетов существует событие «Уничтожить». Я полагаю, что .bind (), выполняющий ваши задания по сохранению в этом событии вашего главного окна, должен помочь.
Вы также можете вызвать mainwindow.overrideredirect (True) (раздел 24), который отключает сворачивание, изменение размера и закрытие с помощью кнопок в строке заголовка.