[merge] saving got a progress bar, runs in thread
This commit is contained in:
parent
04ff142f1c
commit
a1d0e39fd4
@ -220,7 +220,7 @@ class Merger(QRunnable):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def result(self):
|
def result(self):
|
||||||
return self._result
|
return self._merged
|
||||||
|
|
||||||
|
|
||||||
# TEST code
|
# TEST code
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
|
import pickle
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from PySide6.QtCore import QRunnable, Slot
|
from PySide6.QtCore import QRunnable, Slot
|
||||||
|
|
||||||
from fixtracks.utils.signals import WriterSignals
|
from fixtracks.utils.signals import WriterSignals
|
||||||
@ -17,3 +19,18 @@ class PickleWriter(QRunnable):
|
|||||||
logging.info("Saving/pickling merged file to %s", self.file_path)
|
logging.info("Saving/pickling merged file to %s", self.file_path)
|
||||||
self.data.save(self.file_path)
|
self.data.save(self.file_path)
|
||||||
self.signals.finished.emit(True)
|
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)
|
@ -1,11 +1,14 @@
|
|||||||
import logging
|
import logging
|
||||||
import pathlib
|
import pathlib
|
||||||
from PySide6.QtCore import Qt, QThreadPool, Signal, Slot, QRect, QSize, QPoint
|
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 PySide6.QtGui import QImage, QPixmap, QColor, QPen, QPainter
|
||||||
|
|
||||||
from fixtracks.utils.reader import ImageReader, DataFrameReader
|
from fixtracks.utils.reader import ImageReader, DataFrameReader
|
||||||
from fixtracks.utils.merger import Merger
|
from fixtracks.utils.merger import Merger
|
||||||
|
from fixtracks.utils.writer import DataFrameWriter
|
||||||
|
|
||||||
|
|
||||||
class VideoPreview(QWidget):
|
class VideoPreview(QWidget):
|
||||||
@ -77,7 +80,7 @@ class MergeDetections(QWidget):
|
|||||||
self.left_preview = VideoPreview()
|
self.left_preview = VideoPreview()
|
||||||
self.left_framespinner = QSpinBox()
|
self.left_framespinner = QSpinBox()
|
||||||
self.left_framespinner.setMaximum(10000)
|
self.left_framespinner.setMaximum(10000)
|
||||||
self.left_framespinner.setValue(100)
|
self.left_framespinner.setValue(500)
|
||||||
|
|
||||||
self.right_datacombo = QComboBox()
|
self.right_datacombo = QComboBox()
|
||||||
self.right_videocombo = QComboBox()
|
self.right_videocombo = QComboBox()
|
||||||
@ -88,7 +91,7 @@ class MergeDetections(QWidget):
|
|||||||
self.right_preview = VideoPreview(left=False)
|
self.right_preview = VideoPreview(left=False)
|
||||||
self.right_framespinner = QSpinBox()
|
self.right_framespinner = QSpinBox()
|
||||||
self.right_framespinner.setMaximum(10000)
|
self.right_framespinner.setMaximum(10000)
|
||||||
self.right_framespinner.setValue(100)
|
self.right_framespinner.setValue(500)
|
||||||
|
|
||||||
self._mergePreviewBtn = QPushButton("Preview")
|
self._mergePreviewBtn = QPushButton("Preview")
|
||||||
self._mergePreviewBtn.clicked.connect(self.on_mergePreview)
|
self._mergePreviewBtn.clicked.connect(self.on_mergePreview)
|
||||||
@ -105,6 +108,11 @@ class MergeDetections(QWidget):
|
|||||||
self._backBtn = QPushButton("Back")
|
self._backBtn = QPushButton("Back")
|
||||||
self._backBtn.clicked.connect(self.on_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 = QGridLayout()
|
||||||
grid.addWidget(self.left_preview, 0, 0)
|
grid.addWidget(self.left_preview, 0, 0)
|
||||||
grid.addWidget(self.right_preview, 0, 1)
|
grid.addWidget(self.right_preview, 0, 1)
|
||||||
@ -115,6 +123,8 @@ class MergeDetections(QWidget):
|
|||||||
btnBox.setAlignment(Qt.AlignmentFlag.AlignLeft)
|
btnBox.setAlignment(Qt.AlignmentFlag.AlignLeft)
|
||||||
btnBox.addWidget(self._backBtn)
|
btnBox.addWidget(self._backBtn)
|
||||||
btnBox.addItem(QSpacerItem(100, 10, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed))
|
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._mergeBtn)
|
||||||
btnBox.addWidget(self._saveBtn)
|
btnBox.addWidget(self._saveBtn)
|
||||||
btnBox.addWidget(self._mergePreviewBtn)
|
btnBox.addWidget(self._mergePreviewBtn)
|
||||||
@ -335,7 +345,8 @@ class MergeDetections(QWidget):
|
|||||||
return img
|
return img
|
||||||
|
|
||||||
def on_save(self):
|
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:
|
if self._merger is not None:
|
||||||
file_dialog = QFileDialog(self)
|
file_dialog = QFileDialog(self)
|
||||||
file_dialog.setAcceptMode(QFileDialog.AcceptMode.AcceptSave)
|
file_dialog.setAcceptMode(QFileDialog.AcceptMode.AcceptSave)
|
||||||
@ -344,7 +355,12 @@ class MergeDetections(QWidget):
|
|||||||
file_path = file_dialog.selectedFiles()[0]
|
file_path = file_dialog.selectedFiles()[0]
|
||||||
if not file_path.endswith(".pkl"):
|
if not file_path.endswith(".pkl"):
|
||||||
file_path += ".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)
|
p = pathlib.Path(file_path)
|
||||||
img = self.merge_images()
|
img = self.merge_images()
|
||||||
img_name = p.with_suffix(".png")
|
img_name = p.with_suffix(".png")
|
||||||
@ -352,6 +368,11 @@ class MergeDetections(QWidget):
|
|||||||
else:
|
else:
|
||||||
logging.debug("Saving failed! Merger is None!")
|
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):
|
def on_back(self):
|
||||||
logging.debug("Back button pressed!")
|
logging.debug("Back button pressed!")
|
||||||
self._merger = None
|
self._merger = None
|
||||||
|
Loading…
Reference in New Issue
Block a user