[merge] saving got a progress bar, runs in thread

This commit is contained in:
Jan Grewe 2025-02-03 20:51:15 +01:00
parent 04ff142f1c
commit a1d0e39fd4
3 changed files with 44 additions and 6 deletions

View File

@ -220,7 +220,7 @@ class Merger(QRunnable):
@property
def result(self):
return self._result
return self._merged
# TEST code

View File

@ -1,4 +1,6 @@
import pickle
import logging
from PySide6.QtCore import QRunnable, Slot
from fixtracks.utils.signals import WriterSignals
@ -17,3 +19,18 @@ class PickleWriter(QRunnable):
logging.info("Saving/pickling merged file to %s", self.file_path)
self.data.save(self.file_path)
self.signals.finished.emit(True)
class DataFrameWriter(QRunnable):
signals = WriterSignals()
def __init__(self, data, file_path):
super().__init__(self)
self.data = data
self.file_path = file_path
@Slot()
def run(self):
logging.info("Saving/pickling DataFrame to %s" % self.file_path)
with open(self.file_path, 'wb') as f:
pickle.dump(self.data, f)
self.signals.finished.emit(True)

View File

@ -1,11 +1,14 @@
import logging
import pathlib
from PySide6.QtCore import Qt, QThreadPool, Signal, Slot, QRect, QSize, QPoint
from PySide6.QtWidgets import QWidget, QGridLayout, QVBoxLayout, QHBoxLayout, QLabel, QPushButton, QComboBox, QSizePolicy, QSpinBox, QGraphicsView, QGraphicsScene, QGraphicsLineItem, QSpacerItem, QProgressDialog, QFileDialog
from PySide6.QtWidgets import QWidget, QGridLayout, QVBoxLayout, QHBoxLayout, QLabel, QProgressBar
from PySide6.QtWidgets import QPushButton, QComboBox, QSizePolicy, QSpinBox, QGraphicsView
from PySide6.QtWidgets import QGraphicsScene, QGraphicsLineItem, QSpacerItem, QProgressDialog, QFileDialog
from PySide6.QtGui import QImage, QPixmap, QColor, QPen, QPainter
from fixtracks.utils.reader import ImageReader, DataFrameReader
from fixtracks.utils.merger import Merger
from fixtracks.utils.writer import DataFrameWriter
class VideoPreview(QWidget):
@ -77,7 +80,7 @@ class MergeDetections(QWidget):
self.left_preview = VideoPreview()
self.left_framespinner = QSpinBox()
self.left_framespinner.setMaximum(10000)
self.left_framespinner.setValue(100)
self.left_framespinner.setValue(500)
self.right_datacombo = QComboBox()
self.right_videocombo = QComboBox()
@ -88,7 +91,7 @@ class MergeDetections(QWidget):
self.right_preview = VideoPreview(left=False)
self.right_framespinner = QSpinBox()
self.right_framespinner.setMaximum(10000)
self.right_framespinner.setValue(100)
self.right_framespinner.setValue(500)
self._mergePreviewBtn = QPushButton("Preview")
self._mergePreviewBtn.clicked.connect(self.on_mergePreview)
@ -105,6 +108,11 @@ class MergeDetections(QWidget):
self._backBtn = QPushButton("Back")
self._backBtn.clicked.connect(self.on_back)
self._progress_bar = QProgressBar(self)
self._progress_bar.setMaximumHeight(20)
self._progress_bar.setValue(0)
self._tasklabel = QLabel()
grid = QGridLayout()
grid.addWidget(self.left_preview, 0, 0)
grid.addWidget(self.right_preview, 0, 1)
@ -115,6 +123,8 @@ class MergeDetections(QWidget):
btnBox.setAlignment(Qt.AlignmentFlag.AlignLeft)
btnBox.addWidget(self._backBtn)
btnBox.addItem(QSpacerItem(100, 10, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed))
btnBox.addWidget(self._tasklabel)
btnBox.addWidget(self._progress_bar)
btnBox.addWidget(self._mergeBtn)
btnBox.addWidget(self._saveBtn)
btnBox.addWidget(self._mergePreviewBtn)
@ -335,7 +345,8 @@ class MergeDetections(QWidget):
return img
def on_save(self):
logging.debug("Save merge results")
logging.debug("MergeDetections: Saving merge results")
self._tasklabel.setText("Saving results to file...")
if self._merger is not None:
file_dialog = QFileDialog(self)
file_dialog.setAcceptMode(QFileDialog.AcceptMode.AcceptSave)
@ -344,7 +355,12 @@ class MergeDetections(QWidget):
file_path = file_dialog.selectedFiles()[0]
if not file_path.endswith(".pkl"):
file_path += ".pkl"
self._merger.save(file_path)
self._progress_bar.setRange(0,0)
save_task = DataFrameWriter(self._merger.result, file_path)
save_task.signals.finished.connect(self.on_dataSaved)
self.threadpool.start(save_task)
p = pathlib.Path(file_path)
img = self.merge_images()
img_name = p.with_suffix(".png")
@ -352,6 +368,11 @@ class MergeDetections(QWidget):
else:
logging.debug("Saving failed! Merger is None!")
def on_dataSaved(self):
self._tasklabel.setText("")
self._progress_bar.setRange(0, 100)
self._progress_bar.setValue(0)
def on_back(self):
logging.debug("Back button pressed!")
self._merger = None