[Tkinter-discuss] main window closing when dialogs are open

Michael Lange klappnase at web.de
Tue Oct 17 12:02:13 CEST 2006


On Tue, 17 Oct 2006 10:02:35 +0200
Bencsik Roland <roland.bencsik at ludensis.hu> wrote:

> Hi Michael,
> 
> Although your version works well, I am still not satisfied with the 
> result, because the user does not know why the program is still running 
> when she pressed the close button.
> So, currently I route the WM_DELETE_WINDOW to a warning dialog which 
> asks the user to use the quit method what the program offer. 
> Unfortunately this version also has a problem that in some cases the 
> warning dialog erases the already popped up dialog.
> 
> Best would be if somehow all the windows and dialogs could be closed and 
> the program be terminated after the clean up tasks are done.
> 

Hi Roland,

I don't know if this is possible at all, even sys.exit() does not seem to work.
Maybe instead of the additional warning dialog you could change the WM_DELETE_WINDOW
callback while the dialog is up, like

    def info(self):
        self.owner.protocol('WM_DELETE_WINDOW', self.bell)
        tkMessageBox.showinfo()
        self.owner.protocol('WM_DELETE_WINDOW', self.quit)

However this might become complicated in a bigger app with lots of message boxes.
Maybe a separate messagebox module would help.

Alternatively you could write your own replacement for tkMessageBox; if the
dialog is derived from Toplevel you should be able to close all windows from
the main window's "close" button.

Michael



More information about the Tkinter-discuss mailing list