我正在使用Tkinter在Python中编写客户端 - 服务器程序。我需要服务器来跟踪连接的客户端。为此,我希望客户端在单击退出按钮(角落中的标准“X”)后向服务器发送自动消息。我怎么知道用户何时退出该程序?
答案 0 :(得分:13)
您想使用顶层窗口的wm_protocol方法。具体来说,您对WM_DELETE_WINDOW
协议感兴趣。如果使用该方法,它允许您注册在窗口被销毁时调用的回调。
用法:
root.protocol("WM_DELETE_WINDOW", app.on_delete)
答案 1 :(得分:5)
您可以使用python atexit
模块。
例如:
import atexit
def doSomethingOnExit():
pass
atexit.register(doSomethingOnExit)
答案 2 :(得分:2)
FWIW:还可以分配特定于窗口小部件的行为。
如果希望在销毁特定窗口小部件时执行操作,则可以考虑覆盖destroy()方法。请参阅以下示例:
class MyButton(Tkinter.Button):
def destroy(self):
print "Yo!"
Tkinter.Button.destroy(self)
root = Tkinter.Tk()
f = Tkinter.Frame(root)
b1 = MyButton(f, text="Do nothing")
b1.pack()
f.pack()
b2 = Tkinter.Button(root, text="f.destroy", command=f.destroy)
b2.pack()
root.mainloop()
当按下按钮'b2'时,框架'f'被破坏,孩子'b1'和“哟!”打印出来。
我在this topic上发布了相同的答案。
答案 3 :(得分:1)
就我而言,以下代码不起作用:
root.protocol("WM_DELETE_WINDOW", app.on_delete) # doesn't work
但是,它使用这种形式:
root.wm_protocol ("WM_DELETE_WINDOW", app.on_delete) # does work