我如何处理Tkinter中的窗口closures事件?

如何在Python Tkinter程序中处理窗口closures事件(用户点击“X”button)?

Tkinter支持一种称为协议处理程序的机制。 在这里,术语协议是指应用程序和窗口pipe理器之间的交互。 最常用的协议称为WM_DELETE_WINDOW ,用于定义用户使用窗口pipe理器明确closures窗口时发生的情况。

您可以使用protocol方法为该protocol 安装处理程序 (该小部件必须是TkToplevel小部件):

这里有一个具体的例子:

 import tkinter as tk from tkinter import messagebox root = tk.Tk() def on_closing(): if messagebox.askokcancel("Quit", "Do you want to quit?"): root.destroy() root.protocol("WM_DELETE_WINDOW", on_closing) root.mainloop() 

马特已经显示了closuresbutton的一个经典修改。
另一个是closuresbutton使窗口最小化。
您可以通过使用iconify方法来重现此行为
协议方法的第二个参数。

以下是在Windows 7上testing的一个工作示例:

 # Python 3 import tkinter import tkinter.scrolledtext as scrolledtext class GUI(object): def __init__(self): root = self.root = tkinter.Tk() root.title('Test') # make the top right close button minimize (iconify) the main window root.protocol("WM_DELETE_WINDOW", root.iconify) # make Esc exit the program root.bind('<Escape>', lambda e: root.destroy()) # create a menu bar with an Exit command menubar = tkinter.Menu(root) filemenu = tkinter.Menu(menubar, tearoff=0) filemenu.add_command(label="Exit", command=root.destroy) menubar.add_cascade(label="File", menu=filemenu) root.config(menu=menubar) # create a Text widget with a Scrollbar attached txt = scrolledtext.ScrolledText(root, undo=True) txt['font'] = ('consolas', '12') txt.pack(expand=True, fill='both') gui = GUI() gui.root.mainloop() 

在这个例子中,我们给用户两个新的退出选项:
经典文件菜单 – >退出,还有Escbutton。

使用closeEvent

 def closeEvent(self, event): # code to be executed