Переопределение кнопочного управления Tkinter “X” (кнопка, которые закрывают окно) [дубликат]

Этот вопрос уже имеет ответ здесь:

Когда пользователь нажимает завершение Button то, что я создал, некоторые задачи выполняются перед выходом. Однако, если пользователь нажимает [X] кнопка в верхнем правом из окна для закрытия окна я не могу выполнить эти задачи.

Как может я переопределять то, что происходит, когда пользователь нажимает [X] кнопка?

26
задан nbro 11 March 2015 в 23:00
поделиться

3 ответа

Похоже, что ваше окно сохранения должно быть модальным.

Если это основное окно сохранения, зачем вы изобретаете колесо? Tk имеет tkFileDialog для этой цели.


Если вы хотите переопределить стандартное поведение уничтожения окна, вы можете просто сделать:

root.protocol('WM_DELETE_WINDOW', doSomething)  # root is your root window

def doSomething():
    # check if saving
    # if not:
    root.destroy()

Таким образом, вы можете перехватить вызов destroy(), когда кто-то закрывает окно (любым способом), и делать то, что вам нравится.

43
ответ дан 28 November 2019 в 07:02
поделиться

Вы ищете команду wm_protocol , задавая ей «WM_DELETE_WINDOW» в качестве протокола для привязки. Он позволяет вам определить процедуру, вызываемую, когда оконный менеджер закрывает окно (что происходит, когда вы щелкаете [x] ).

2
ответ дан 28 November 2019 в 07:02
поделиться

Я нашел ссылку на Tkinter здесь . Он не идеален, но охватывает почти все, что мне когда-либо было нужно. Я считаю, что раздел 30.3 (Типы событий) помогает, он сообщает нам, что для виджетов существует событие «Уничтожить». Я полагаю, что .bind (), выполняющий ваши задания по сохранению в этом событии вашего главного окна, должен помочь.

Вы также можете вызвать mainwindow.overrideredirect (True) (раздел 24), который отключает сворачивание, изменение размера и закрытие с помощью кнопок в строке заголовка.

1
ответ дан 28 November 2019 в 07:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: