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