Guido van Rossum | 35820f7 | 1994-10-07 09:55:26 +0000 | [diff] [blame] | 1 | from Tkinter import * |
| 2 | |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame] | 3 | # This file shows how to trap the killing of a window |
Guido van Rossum | 35820f7 | 1994-10-07 09:55:26 +0000 | [diff] [blame] | 4 | # when the user uses window manager menus (typ. upper left hand corner |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame] | 5 | # menu in the decoration border). |
Guido van Rossum | 35820f7 | 1994-10-07 09:55:26 +0000 | [diff] [blame] | 6 | |
| 7 | |
| 8 | ### ******* this isn't really called -- read the comments |
| 9 | def my_delete_callback(): |
Collin Winter | 6f2df4d | 2007-07-17 20:59:35 +0000 | [diff] [blame] | 10 | print("whoops -- tried to delete me!") |
Guido van Rossum | 35820f7 | 1994-10-07 09:55:26 +0000 | [diff] [blame] | 11 | |
| 12 | class Test(Frame): |
| 13 | def deathHandler(self, event): |
Collin Winter | 6f2df4d | 2007-07-17 20:59:35 +0000 | [diff] [blame] | 14 | print(self, "is now getting nuked. performing some save here....") |
Guido van Rossum | 35820f7 | 1994-10-07 09:55:26 +0000 | [diff] [blame] | 15 | |
| 16 | def createWidgets(self): |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame] | 17 | # a hello button |
| 18 | self.hi_there = Button(self, text='Hello') |
| 19 | self.hi_there.pack(side=LEFT) |
Guido van Rossum | 35820f7 | 1994-10-07 09:55:26 +0000 | [diff] [blame] | 20 | |
| 21 | def __init__(self, master=None): |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame] | 22 | Frame.__init__(self, master) |
| 23 | Pack.config(self) |
| 24 | self.createWidgets() |
Guido van Rossum | 35820f7 | 1994-10-07 09:55:26 +0000 | [diff] [blame] | 25 | |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame] | 26 | ### |
| 27 | ### PREVENT WM kills from happening |
| 28 | ### |
Guido van Rossum | 35820f7 | 1994-10-07 09:55:26 +0000 | [diff] [blame] | 29 | |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame] | 30 | # the docs would have you do this: |
Guido van Rossum | 35820f7 | 1994-10-07 09:55:26 +0000 | [diff] [blame] | 31 | |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame] | 32 | # self.master.protocol("WM_DELETE_WINDOW", my_delete_callback) |
Guido van Rossum | 35820f7 | 1994-10-07 09:55:26 +0000 | [diff] [blame] | 33 | |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame] | 34 | # unfortunately, some window managers will not send this request to a window. |
| 35 | # the "protocol" function seems incapable of trapping these "aggressive" window kills. |
| 36 | # this line of code catches everything, tho. The window is deleted, but you have a chance |
| 37 | # of cleaning up first. |
| 38 | self.bind_all("<Destroy>", self.deathHandler) |
Guido van Rossum | 35820f7 | 1994-10-07 09:55:26 +0000 | [diff] [blame] | 39 | |
| 40 | |
| 41 | test = Test() |
| 42 | test.mainloop() |