2009-11-25 71 views
0

我试图通过拦截窗口管理器WM_DELETE_WINDOW事件来阻止在OSX中关闭Toplevel窗口。如何在OSX上使用Tkinter拦截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() 

当我运行这个时,我得到两个弹出窗口标题为“根”和“胜利”。如果我点击“win”上的红色“x”关闭按钮关闭窗口,打印“woof”然后关闭。但是,如果我在Windows上运行相同的代码,则每次单击红色的“x”关闭按钮时,“win”保持打开并保持打印“woof”。

当我点击红色的“x”关闭按钮时,如何保持Toplevel窗口不会关闭OSX?

回答

2

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