Перехватить команду Tkinter «Выход»? - PullRequest
6 голосов
/ 10 января 2011

Я пишу клиент-серверную программу на Python с Tkinter.Мне нужен сервер для отслеживания подключенных клиентов.Для этого я бы хотел, чтобы клиент отправлял автоматическое сообщение на сервер после нажатия кнопки выхода (стандартная буква «X» в углу).Как я могу узнать, когда пользователь выходит из программы?

Ответы [ 4 ]

13 голосов
/ 10 января 2011

Вы хотите использовать метод wm_protocol окна верхнего уровня. В частности, вы заинтересованы в протоколе WM_DELETE_WINDOW. Если вы используете этот метод, он позволяет зарегистрировать обратный вызов, который вызывается при разрушении окна.

Использование:

root.protocol("WM_DELETE_WINDOW", app.on_delete)
5 голосов
/ 23 февраля 2015

Вы можете использовать модуль Python atexit.

Например:

import atexit

def doSomethingOnExit():
    pass

atexit.register(doSomethingOnExit)
2 голосов
/ 09 февраля 2011

FWIW: также можно назначить поведение, зависящее от виджета.

Если вы хотите, чтобы действие происходило при уничтожении определенного виджета, вы можете переопределить метод destroy ().См. Следующий пример:

class MyButton(Tkinter.Button):
    def destroy(self):
        print "Yo!"
        Tkinter.Button.destroy(self)

root = Tkinter.Tk()

f = Tkinter.Frame(root)
b1 = MyButton(f, text="Do nothing")
b1.pack()
f.pack()

b2 = Tkinter.Button(root, text="f.destroy", command=f.destroy)          
b2.pack()

root.mainloop()

Когда нажата кнопка «b2», рамка «f» уничтожается с дочерними элементами «b1» и «Yo!»

Я отправил тот же ответ на в этой теме .

1 голос
/ 23 марта 2012

В моем случае следующий код не работал:

root.protocol("WM_DELETE_WINDOW", app.on_delete)  # doesn't work

Тем не менее, он работал с использованием этой формы:

root.wm_protocol ("WM_DELETE_WINDOW", app.on_delete)  # does work
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...