tkinter-protocol-创建销毁窗口

WM_DELETE_WINDOW

除事件绑定外,Tkinter还支持一种称为协议(protocol-)处理程序的机制。 协议是指应用程序与窗口管理器之间的交互。 最常用的协议称为
WM_DELETE_WINDOW
用于定义当用户使用窗口管理器显式关闭窗口时发生的情况。可以使用协议方法来为此协议安装处理程序(小部件必须是根或顶级插件):

widget.protocol("WM_DELETE_WINDOW", handler)

一旦定义了自己的处理程序handler,Tkinter将不再自动关闭窗口。 相反,可以如显示一个消息框,询问用户是否应保存当前数据,或者在某些情况下,只需忽略请求即可。 要从此处理程序关闭窗口,只需调用窗口的destroy方法。

示例:在点击窗口x退出时,增加确认界面(tkinter.messagebox.askokcancel()

from tkinter import Tk
from  tkinter import messagebox
#tkinter的信息窗口

root = Tk()
# 当点击窗口x退出时,执行的程序
def on_closing():
    if messagebox.askokcancel("Quit", "Do you want to quit?"):
        root.destroy()

# WM_DELETE_WINDOW 不能改变,这是捕获命令
root.protocol('WM_DELETE_WINDOW', on_closing)
root.mainloop()

However, as of Python 1.5.2, Tkinter will not destroy the corresponding widget instance hierarchy, so it is a good idea to always register a handler yourself

请注意,即使您没有在顶级窗口上为WM_DELETE_WINDOW注册处理程序,该窗口本身也将照常销毁(以受控方式,与X不同)。 但是,从Python 1.5.2开始,Tkinter不会破坏相应的窗口小部件实例层次结构,因此始终自己注册一个处理程序是一个好主意。

top = Toplevel(...)

# make sure widget instances are deleted
top.protocol("WM_DELETE_WINDOW", top.destroy)

Other Protocols

窗口管理器协议最初是X窗口系统的一部分(它们在名为Inter-Client Communication Conventions Manual, or ICCCM)的文档中定义)。 在该平台上,您还可以安装其他协议的处理程序,例如WM_TAKE_FOCUSWM_SAVE_YOURSELF。 有关详细信息,请参见ICCCM文档。

原文链接:protocols

你可能感兴趣的:(笔记,python,tkinter)