diff -r ed694938c61a Lib/idlelib/Debugger.py --- a/Lib/idlelib/Debugger.py Tue Sep 22 13:08:42 2015 +0300 +++ b/Lib/idlelib/Debugger.py Tue Sep 22 15:30:29 2015 -0700 @@ -71,6 +71,7 @@ if self.interacting: self.top.bell() return + self.abort_loop() if self.stackviewer: self.stackviewer.close(); self.stackviewer = None # Clean up pyshell if user clicked debugger control close widget. @@ -191,7 +192,8 @@ b.configure(state="normal") # self.top.wakeup() - self.root.mainloop() + # nested main loop + self.root.tk.call('vwait', '::idledebugwait') # for b in self.buttons: b.configure(state="disabled") @@ -215,23 +217,26 @@ def cont(self): self.idb.set_continue() - self.root.quit() + self.abort_loop() def step(self): self.idb.set_step() - self.root.quit() + self.abort_loop() def next(self): self.idb.set_next(self.frame) - self.root.quit() + self.abort_loop() def ret(self): self.idb.set_return(self.frame) - self.root.quit() + self.abort_loop() def quit(self): self.idb.set_quit() - self.root.quit() + self.abort_loop() + + def abort_loop(self): + self.root.tk.call('set', '::idledebugwait', '1') stackviewer = None