38 lines
1.2 KiB
Python
38 lines
1.2 KiB
Python
from PyQt6.QtWidgets import QWidget, QPlainTextEdit
|
|
from PyQt6.QtCore import QTimer, QThread, pyqtSignal
|
|
import queue
|
|
|
|
class RichLogThread(QThread):
|
|
def __init__(self, parent=None):
|
|
super().__init__(parent)
|
|
self.logQueue = queue.Queue()
|
|
self.maxLines = 5000
|
|
self.logLines = []
|
|
|
|
def run(self):
|
|
while True:
|
|
if not self.logQueue.empty():
|
|
logData = self.logQueue.get()
|
|
self.logLines.append(logData)
|
|
if len(self.logLines) > self.maxLines:
|
|
self.logLines.pop(0)
|
|
QThread.usleep(1)
|
|
|
|
class RichLogForm(QWidget):
|
|
def __init__(self, parent=None):
|
|
super().__init__(parent)
|
|
self.ui = QPlainTextEdit(self)
|
|
self.ui.setReadOnly(True)
|
|
self.timer = QTimer()
|
|
self.logThread = RichLogThread()
|
|
self.timer.timeout.connect(self.updateLogDisplay)
|
|
self.timer.start(100)
|
|
self.logThread.start()
|
|
|
|
def addLog(self, logData):
|
|
self.logThread.logQueue.put(logData)
|
|
|
|
def updateLogDisplay(self):
|
|
if self.logThread.logLines:
|
|
self.ui.appendHtml("".join(self.logThread.logLines))
|
|
self.logThread.logLines = [] |