Tk's default Toplevel - counterintuitive

Guido van Rossum guido at
Fri Aug 20 14:27:16 CEST 1999

bowman <bowman at> writes:

> Chad Netzer wrote:
> > 
> > PS.  What is the way to register a callback so that you can intercept the
> > window manager's request to destroy a window?  Then you could just bind
> > the sys.exit call to this on the Tk object...
> def main():
> 	global top
> 	top = Tk()
> 	top.withdraw()
> 	mb = buildMenubar()
> 	mb.entryconfigure(2, activebackground='red')
> 	myTop = Toplevel(menu=mb)
> 	myTop.bind('<Destroy>', dying)
> def dying(event) :
> 	print 'Toplevel is getting destroyed'
> 	top.quit()
> The above snippet is a little ugly, but it works. Otherwise, if you kill
> the visible window with the system box, the top process keeps on
> chugging along. I like the Toplevel's menu setup rather than using
> Menubutton's and the deprecated (atleast in the Tcl/Tk world)
> tk_menuBar.

Actually, the accepted idiom (all over the place in code I write) is

        toplevel_window.protocol("WM_DELETE_WINDOW", close_callback)

The close_callback function takes no arguments.  In simple cases, you
can use

	root.protocol("WM_DELETE_WINDOW", root.destroy)


	root.protocol("WM_DELETE_WINDOW", root.quit)

--Guido van Rossum (home page:

More information about the Python-list mailing list