Переопределение кнопки кнопки Tkinter «X» (кнопка, закрывающая окно)

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

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

4 Solutions collect form web for “Переопределение кнопки кнопки Tkinter «X» (кнопка, закрывающая окно)”

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

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


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

 root.protocol('WM_DELETE_WINDOW', doSomething) # root is your root window def doSomething(): # check if saving # if not: root.destroy() 

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

Используя метод procotol , мы можем переопределить протокол WM_DELETE_WINDOW , связав с ним вызов функции, в этом случае функция вызывается on_exit :

 import tkinter as tk from tkinter import messagebox class App(tk.Tk): def __init__(self): tk.Tk.__init__(self) self.title("Handling WM_DELETE_WINDOW protocol") self.geometry("500x300+500+200") self.make_topmost() self.protocol("WM_DELETE_WINDOW", self.on_exit) def on_exit(self): """When you click to exit, this function is called""" if messagebox.askyesno("Exit", "Do you want to quit the application?"): self.destroy() def center(self): """Centers this Tk window""" self.eval('tk::PlaceWindow %s center' % app.winfo_pathname(app.winfo_id())) def make_topmost(self): """Makes this window the topmost window""" self.lift() self.attributes("-topmost", 1) self.attributes("-topmost", 0) if __name__ == '__main__': App().mainloop() 

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

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

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

  • NoneType Ошибка self.widget.insert
  • Окно Tkinter автоматически закрывается после запуска программы Python в PyCharm
  • анимация цветного сюжета с воспроизведением, пауза, остановка использования с помощью Tkinter с вложением pylab / matplotlib: невозможно обновить фигуру / холст?
  • Tkinter: настройка метода для динамически генерируемых меток
  • Понимание родителя и контроллера в Tkinter __init__
  • Tkinter: доступ к холсту из обработчика кнопок
  • Как создать простой ящик сообщений в Python?
  • Ввод данных от пользователя в Tkinter
  •  
    Interesting Posts for Van-Lav

    Элегантный способ создания пустых панд DataFrame с NaN типа float

    Python: некоторый атрибут «__magic__» для ссылки на функцию изнутри этой функции

    Сценарий Python для чтения текстового файла и записи в файл csv

    matplotlib круг, анимация, как удалить старый круг в анимации

    и {} vs list () и dict (), что лучше?

    Проблемы с matplotlib и libpng с записью ipython

    Как настроить FTS3 / FTS4 с помощью python2.7 в Windows

    как подключить пользовательский интерфейс chatbot к серверу APIAI через python sdk или javascript?

    Xpath vs DOM vs BeautifulSoup vs lxml vs other Какой самый быстрый подход к анализу веб-страницы?

    Проблема с использованием библиотеки PIL python для обрезки и сохранения изображения

    Панды: Группируйте по календарю-неделе, затем группируйте стрижки для реального времени

    Как преобразовать HTML-страницу в PDF с помощью Django

    Вызовите Python или Lua из C ++, чтобы оценить выражение, вычисляя неизвестные переменные только в случае необходимости

    Как применить функцию zip к n-list

    Pycharm останавливается на неизвестных контрольных точках в режиме отладки

    Python - лучший язык программирования в мире.