From 9e9acf619f76b0fb5b5dab837db48d5efd44a683 Mon Sep 17 00:00:00 2001 From: Almar Klein Date: Tue, 10 Mar 2026 13:23:08 +0100 Subject: [PATCH 1/3] Fix closing --- rendercanvas/base.py | 8 +++++--- rendercanvas/wx.py | 4 ++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/rendercanvas/base.py b/rendercanvas/base.py index ae97e566..ee6fa4d8 100644 --- a/rendercanvas/base.py +++ b/rendercanvas/base.py @@ -676,10 +676,12 @@ def close(self) -> None: except Exception: pass self._canvas_context = None - # Clean events. Should already have happened in loop, but the loop may not be running. - self._events.close() # Let the subclass clean up. - self._rc_close() + try: + self._rc_close() + finally: + # Clean events. Should already have happened in loop, but the loop may not be running. + self._events.close() def get_closed(self) -> bool: """Get whether the window is closed.""" diff --git a/rendercanvas/wx.py b/rendercanvas/wx.py index 2f10ac77..a697c14a 100644 --- a/rendercanvas/wx.py +++ b/rendercanvas/wx.py @@ -359,9 +359,9 @@ def _rc_close(self): except RuntimeError: return # native C++ object is already deleted if isinstance(parent, WxRenderCanvas): - parent.Hide() + parent.Close() else: - self.Hide() + self.Close() def _rc_get_closed(self): return self._is_closed From 1c9c799a396d2cb12861e0a211b2d4466ffeb536 Mon Sep 17 00:00:00 2001 From: Almar Klein Date: Wed, 11 Mar 2026 08:55:30 +0100 Subject: [PATCH 2/3] Test if time to draw bitmap on GDI causes hang --- rendercanvas/wx.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rendercanvas/wx.py b/rendercanvas/wx.py index a697c14a..9067ba03 100644 --- a/rendercanvas/wx.py +++ b/rendercanvas/wx.py @@ -247,7 +247,8 @@ def on_paint(self, event): if not self._draw_lock: self._time_to_paint() if self._last_image is not None: - dc.DrawBitmap(self._last_image, 0, 0, False) + # dc.DrawBitmap(self._last_image, 0, 0, False) + dc.drawRectangle(0, 0, 10, 10) else: event.Skip() del dc From 41d73300613b6842eef2693003f7c413dca75678 Mon Sep 17 00:00:00 2001 From: Almar Klein Date: Wed, 11 Mar 2026 09:09:35 +0100 Subject: [PATCH 3/3] disable draw lock --- rendercanvas/wx.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rendercanvas/wx.py b/rendercanvas/wx.py index 9067ba03..c2fe6e9c 100644 --- a/rendercanvas/wx.py +++ b/rendercanvas/wx.py @@ -384,7 +384,7 @@ def _rc_set_cursor(self, cursor): # %% Turn wx events into rendercanvas events def _on_resize(self, event: wx.SizeEvent): - self._draw_lock = True + # self._draw_lock = True self._resize_timer.Start(100, wx.TIMER_ONE_SHOT) lsize = float(self.Size[0]), float(self.Size[1])