diff -r 2bbe7dc920de Lib/idlelib/IOBinding.py --- a/Lib/idlelib/IOBinding.py Sat Dec 10 17:55:31 2011 -0500 +++ b/Lib/idlelib/IOBinding.py Tue Dec 13 23:25:07 2011 -0600 @@ -156,7 +156,8 @@ self.filename_change_hook() def open(self, event=None, editFile=None): - if self.editwin.flist: + flist = self.editwin.flist + if flist: if not editFile: filename = self.askopenfile() else: @@ -167,16 +168,22 @@ # we open a new window. But we won't replace the # shell window (which has an interp(reter) attribute), which # gets set to "not modified" at every new prompt. + # Also, make sure the current window has not been closed, + # since it can be closed during the Open File dialog. try: interp = self.editwin.interp except AttributeError: interp = None - if not self.filename and self.get_saved() and not interp: - self.editwin.flist.open(filename, self.loadfile) + + if self.editwin and not self.filename and \ + self.get_saved() and not interp: + flist.open(filename, self.loadfile) else: - self.editwin.flist.open(filename) + flist.open(filename) else: - self.text.focus_set() + if self.text: + self.text.focus_set() + return "break" # # Code for use outside IDLE: diff -r 2bbe7dc920de Lib/idlelib/PyShell.py --- a/Lib/idlelib/PyShell.py Sat Dec 10 17:55:31 2011 -0500 +++ b/Lib/idlelib/PyShell.py Tue Dec 13 23:25:07 2011 -0600 @@ -1422,7 +1422,8 @@ if tkversionwarning: shell.interp.runcommand(''.join(("print('", tkversionwarning, "')"))) - root.mainloop() + while flist.inversedict: # keep IDLE running while files are open. + root.mainloop() root.destroy() if __name__ == "__main__":