Как перехватить WM_DELETE_WINDOW в OSX с помощью Tkinter - PullRequest
0 голосов
/ 26 ноября 2009

Я пытаюсь предотвратить закрытие окна Toplevel в OSX, перехватывая событие оконного менеджера WM_DELETE_WINDOW.

#!/usr/bin/env python

from Tkinter import *

def speak():
    print "woof"

root = Tk()
root.title("root")
win = Toplevel()
win.title("win")
win.protocol('WM_DELETE_WINDOW', speak)
root.mainloop()

Когда я запускаю это, я получаю два всплывающих окна с названиями «root» и «win». Если я нажимаю красную кнопку закрытия «x» на «win», чтобы закрыть окно, выводит «woof», а затем закрывается. Однако, если я запускаю этот же код в окнах, «win» остается открытым и продолжает печатать «woof» каждый раз, когда я нажимаю красную кнопку «x» закрытия.

Как я могу предотвратить закрытие окна Toplevel на OSX, когда я нажимаю красную кнопку закрытия "x"?

1 Ответ

2 голосов
/ 19 июля 2011

См. Ответ на Python Issue 12584 . Кажется, это ошибка в очень глючном Cocoa Tcl / Tk 8.5, который Apple поставляла с OS X 10.6. Не используйте его или предоставленные Apple питоны в 10.6, если вы используете Tkinter или что-то, что использует Tkinter, например IDLE. Подробнее здесь .

...