From 2a72432c1a268870d93f04eada288505e5a26e70 Mon Sep 17 00:00:00 2001 From: jimmy Date: Sat, 22 Nov 2025 16:18:10 +1300 Subject: [PATCH] Fix RuntimeError: schedule async updates through root.after() to ensure event loop is running --- src/main.py | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/main.py b/src/main.py index 8651e25..4db57eb 100644 --- a/src/main.py +++ b/src/main.py @@ -694,13 +694,16 @@ class App: if self.pending_rgb_update_id: self.root.after_cancel(self.pending_rgb_update_id) self.pending_rgb_update_id = None - self.update_rgb(tab) + # Use root.after() to ensure the async event loop is running + # A delay of 0 will execute on the next event loop iteration + self.root.after(0, lambda: self.update_rgb(tab)) self.last_rgb_update_time = current_time elif current_time - self.last_rgb_update_time >= self.rgb_update_interval_ms: if self.pending_rgb_update_id: self.root.after_cancel(self.pending_rgb_update_id) self.pending_rgb_update_id = None - self.update_rgb(tab) + # Use root.after() to ensure the async event loop is running + self.root.after(0, lambda: self.update_rgb(tab)) self.last_rgb_update_time = current_time else: if self.pending_rgb_update_id: @@ -714,13 +717,15 @@ class App: if self.pending_brightness_update_id: self.root.after_cancel(self.pending_brightness_update_id) self.pending_brightness_update_id = None - self.update_brightness(tab) + # Use root.after() to ensure the async event loop is running + self.root.after(0, lambda: self.update_brightness(tab)) self.last_brightness_update_time = current_time elif current_time - self.last_brightness_update_time >= self.brightness_update_interval_ms: if self.pending_brightness_update_id: self.root.after_cancel(self.pending_brightness_update_id) self.pending_brightness_update_id = None - self.update_brightness(tab) + # Use root.after() to ensure the async event loop is running + self.root.after(0, lambda: self.update_brightness(tab)) self.last_brightness_update_time = current_time else: if self.pending_brightness_update_id: @@ -734,13 +739,15 @@ class App: if self.pending_delay_update_id: self.root.after_cancel(self.pending_delay_update_id) self.pending_delay_update_id = None - self.update_delay(tab) + # Use root.after() to ensure the async event loop is running + self.root.after(0, lambda: self.update_delay(tab)) self.last_delay_update_time = current_time elif current_time - self.last_delay_update_time >= self.delay_update_interval_ms: if self.pending_delay_update_id: self.root.after_cancel(self.pending_delay_update_id) self.pending_delay_update_id = None - self.update_delay(tab) + # Use root.after() to ensure the async event loop is running + self.root.after(0, lambda: self.update_delay(tab)) self.last_delay_update_time = current_time else: if self.pending_delay_update_id: @@ -754,13 +761,15 @@ class App: if self.pending_n_params_update_id: self.root.after_cancel(self.pending_n_params_update_id) self.pending_n_params_update_id = None - self.update_n_params(tab) + # Use root.after() to ensure the async event loop is running + self.root.after(0, lambda: self.update_n_params(tab)) self.last_n_params_update_time = current_time elif current_time - self.last_n_params_update_time >= self.n_params_update_interval_ms: if self.pending_n_params_update_id: self.root.after_cancel(self.pending_n_params_update_id) self.pending_n_params_update_id = None - self.update_n_params(tab) + # Use root.after() to ensure the async event loop is running + self.root.after(0, lambda: self.update_n_params(tab)) self.last_n_params_update_time = current_time else: if self.pending_n_params_update_id: