Add calls to self.protocol("WM_DELETE_WINDOW", self.destroy) to the Tk
and Toplevel class constructors.  This means that if the window
manager closes the window, the Python-side Tkinter data structures
will be destroyed correctly.  (Most apps do this anyway, and it's
recommended practice; I see no reason why making it the default
behavior could be bad.)
diff --git a/Lib/lib-tk/Tkinter.py b/Lib/lib-tk/Tkinter.py
index 8d06ef1..7674591 100644
--- a/Lib/lib-tk/Tkinter.py
+++ b/Lib/lib-tk/Tkinter.py
@@ -910,6 +910,7 @@
 		self.readprofile(baseName, className)
 		if _support_default_root and not _default_root:
 			_default_root = self
+		self.protocol("WM_DELETE_WINDOW", self.destroy)
 	def destroy(self):
 		for c in self.children.values(): c.destroy()
 		self.tk.call('destroy', self._w)
@@ -1119,6 +1120,7 @@
 		root = self._root()
 		self.iconname(root.iconname())
 		self.title(root.title())
+		self.protocol("WM_DELETE_WINDOW", self.destroy)
 
 class Button(Widget):
 	def __init__(self, master=None, cnf={}, **kw):