in reply to One shot way to end a sub?

I don't think this is going to work. User input can only be processed (or even detected) by the application when control is given back to Tk. Your loop never gives back control to Tk, so any mouse-clicks made by the user on the cancel button will be queued by X (or someother GUI system) until the program returns control to Tk. In your case, this happens not before your start() function exits. You may want to call DoOneEvent(), a poorly documented function, but calling this forces Tk to handle any outstanding events.