2009-11-25 67 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