如何使用Tkinter拦截OSX上的WM_DELETE_WINDOW

时间:2009-11-25 22:45:05

标签: python macos osx-snow-leopard tkinter

我试图通过截取窗口管理器WM_DELETE_WINDOW事件来阻止Toplevel窗口在OSX中关闭。

#!/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”的弹出窗口。如果我点击“win”上的红色“x”关闭按钮关闭窗口,打印“woof”然后关闭。但是,如果我在Windows上运行相同的代码“win”保持打开状态,并且每次单击红色的“x”关闭按钮时都会保持打印“woof”。

当我点击红色的“x”关闭按钮时,如何让Toplevel窗口在OSX上关闭?

1 个答案:

答案 0 :(得分:2)

查看对Python Issue 12584的回复。它似乎是苹果随OS X 10.6发布的非常有缺陷的Cocoa Tcl / Tk 8.5中的一个错误。如果您使用的是Tkinter或使用Tkinter的任何东西,比如IDLE,请不要在10.6中使用它或Apple提供的Pythons。更多信息here