diff --git a/wx/lib/agw/aui/auibook.py b/wx/lib/agw/aui/auibook.py index 053f18dd..8cb6756f 100644 --- a/wx/lib/agw/aui/auibook.py +++ b/wx/lib/agw/aui/auibook.py @@ -5581,7 +5581,7 @@ class AuiNotebook(wx.Panel): else: main_idx = self._tabs.GetIdxFromWindow(close_wnd) - self.DeletePage(main_idx) + wx.CallAfter(self.DeletePage, main_idx) # notify owner that the tab has been closed e2 = AuiNotebookEvent(wxEVT_COMMAND_AUINOTEBOOK_PAGE_CLOSED, self.GetId()) diff --git a/wx/lib/agw/aui/framemanager.py b/wx/lib/agw/aui/framemanager.py index 69e4e3ac..88ccdd66 100644 --- a/wx/lib/agw/aui/framemanager.py +++ b/wx/lib/agw/aui/framemanager.py @@ -7376,7 +7376,12 @@ class AuiManager(wx.EvtHandler): if paneInfo.IsMaximized(): self.RestorePane(paneInfo) paneInfo.Float() - self.Update() + + # The call to Update may result in + # the notebook that generated this + # event being deleted, so we have + # to do the call asynchronously. + wx.CallAfter(self.Update) self._action_window = paneInfo.window @@ -7417,8 +7422,15 @@ class AuiManager(wx.EvtHandler): if e.GetVeto(): return - self.ClosePane(p) - self.Update() + # Close/update asynchronously, because + # the notebook which generated the event + # (and triggered this method call) will + # be deleted. + def close(): + self.ClosePane(p) + self.Update() + + wx.CallAfter(close) else: event.Skip()