1 Commits

Author SHA1 Message Date
kaibot
f6b5738dfc 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 #
2026-04-09 00:03:52 +00:00

40
qt.py
View File

@@ -2085,6 +2085,14 @@ class BalBuildWillDialog(BalDialog):
self.setMinimumWidth(600) self.setMinimumWidth(600)
self.setMinimumHeight(100) self.setMinimumHeight(100)
self.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Preferred) 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.labels = []
self.check_row = None self.check_row = None
self.inval_row = None self.inval_row = None
@@ -2535,17 +2543,41 @@ class BalBuildWillDialog(BalDialog):
w.deleteLater() w.deleteLater()
def msg_update(self): 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) self.clear_layout(self.labelsbox)
for label in self.labels:
label=label.replace("\n","<br>") # Aggiunge solo i messaggi nuovi
qlabel=QLabel(label) for text in self._message_queue:
self.labelsbox.addWidget(QLabel(label),1) formatted_text = text.replace("\n", "<br>")
qlabel = QLabel(formatted_text)
qlabel.setWordWrap(True)
self.labelsbox.addWidget(qlabel)
self._message_queue = []
self.setMinimumHeight(30*(len(self.labels)+2)) self.setMinimumHeight(30*(len(self.labels)+2))
def get_text(self): def get_text(self):
return self.message_label.text() 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 pass