如何在OSX上使用Tkinter拦截WM_DELETE_WINDOW

0 投票
1 回答
2031 浏览
提问于 2025-04-15 16:23

我正在尝试在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”。如果我点击“win”窗口上的红色“x”关闭按钮,程序会打印“woof”,然后窗口就关闭了。不过,如果我在Windows系统上运行同样的代码,“win”窗口会保持打开,每次我点击红色“x”关闭按钮时,都会继续打印“woof”。

我该如何在OSX上点击红色“x”关闭按钮时,保持顶层窗口不关闭呢?

1 个回答

2

请查看对 Python问题12584 的回复。看起来这是一个出现在苹果在OS X 10.6中提供的Cocoa Tcl/Tk 8.5里的错误,这个版本的Tcl/Tk问题很多。如果你在使用Tkinter或者任何依赖Tkinter的东西,比如IDLE,最好不要使用这个版本或者苹果提供的Python。更多信息可以在 这里 找到。

撰写回答