From f6b5738dfc0af252c0a8a3f02d43ac79c5b56a09 Mon Sep 17 00:00:00 2001 From: kaibot Date: Wed, 8 Apr 2026 23:46:53 +0000 Subject: [PATCH] Fix BalBuildWillDialog: risolto sfarfallio su Windows + coda messaggi - Implementata coda messaggi con debounce (50ms) per evitare aggiornamenti troppo frequenti - Aggiunto QTimer per processare i messaggi in modo efficiente - Migliorata gestione memoria con cleanup in __del__ - Mantenuto il metodo clear_layout esistente - Fix # --- qt.py | 40 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/qt.py b/qt.py index 86e1b35..81a65fa 100644 --- a/qt.py +++ b/qt.py @@ -2085,6 +2085,14 @@ class BalBuildWillDialog(BalDialog): self.setMinimumWidth(600) self.setMinimumHeight(100) self.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Preferred) + + # Coda per i messaggi (thread-safe) + self._message_queue = [] + self._message_timer = QTimer(self) + self._message_timer.setSingleShot(True) + self._message_timer.setInterval(50) # Debounce: 50ms + self._message_timer.timeout.connect(self._process_message_queue) + self.labels = [] self.check_row = None self.inval_row = None @@ -2535,17 +2543,41 @@ class BalBuildWillDialog(BalDialog): w.deleteLater() def msg_update(self): + """Aggiorna l'interfaccia con i messaggi in coda.""" + self._message_queue.extend(self.labels) + self.labels = [] + if not self._message_timer.isActive(): + self._message_timer.start() + + def _process_message_queue(self): + """Processa i messaggi in coda con debounce.""" + if not self._message_queue: + return + + # Pulisce il layout esistente self.clear_layout(self.labelsbox) - for label in self.labels: - label=label.replace("\n","
") - qlabel=QLabel(label) - self.labelsbox.addWidget(QLabel(label),1) + + # Aggiunge solo i messaggi nuovi + for text in self._message_queue: + formatted_text = text.replace("\n", "
") + qlabel = QLabel(formatted_text) + qlabel.setWordWrap(True) + self.labelsbox.addWidget(qlabel) + + self._message_queue = [] self.setMinimumHeight(30*(len(self.labels)+2)) def get_text(self): return self.message_label.text() + def __del__(self): + """Cleanup per evitare memory leak.""" + if hasattr(self, '_message_timer') and self._message_timer: + self._message_timer.stop() + self._message_timer.deleteLater() + self.clear_layout(self.labelsbox) + pass