Fix RuntimeError: schedule async updates through root.after() to ensure event loop is running

This commit is contained in:
2025-11-22 16:18:10 +13:00
parent e803dd4243
commit 2a72432c1a

View File

@@ -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: