[tracks] writing results works

This commit is contained in:
Jan Grewe 2025-01-28 18:00:04 +01:00
parent a60bfdb418
commit 216be7b1e5
3 changed files with 36 additions and 6 deletions

View File

@ -8,6 +8,11 @@ class ProducerSignals(QObject):
progress = Signal(float)
progress2 = Signal((str, float, float))
class WriterSignals(QObject):
error = Signal(str)
finished = Signal(bool)
class DetectionViewSignals(QObject):
trackClicked = Signal(int)
itemsSelected = Signal(list)

View File

@ -1,4 +1,3 @@
import pickle
import logging
from PySide6.QtCore import QRunnable, Slot

View File

@ -1,14 +1,16 @@
import logging
import pathlib
import pickle
import numpy as np
import pandas as pd
from PySide6.QtCore import Qt, QThreadPool, Signal, QAbstractTableModel, QSortFilterProxyModel, QItemSelectionModel, QSize, QObject
from PySide6.QtCore import Qt, QThreadPool, Signal, QAbstractTableModel, QSortFilterProxyModel, QSize, QObject
from PySide6.QtGui import QImage, QBrush, QColor, QFont
from PySide6.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QLabel, QPushButton, QSizePolicy, QComboBox
from PySide6.QtWidgets import QSpinBox, QSpacerItem, QProgressBar, QTableView, QSplitter, QGridLayout
from PySide6.QtWidgets import QSpinBox, QSpacerItem, QProgressBar, QTableView, QSplitter, QGridLayout, QFileDialog
from fixtracks.utils.reader import PickleLoader
from fixtracks.utils.writer import PickleWriter
from fixtracks.widgets.detectionview import DetectionView
from fixtracks.widgets.detectiontimeline import DetectionTimeline
@ -253,7 +255,12 @@ class DataController(QObject):
self._data["track"][self._user_selections] = track_id
def save(self, filename):
pass
export_columns = self._columns.copy()
export_columns.remove("index")
dictionary = {c: self._data[c] for c in export_columns}
df = pd.DataFrame(dictionary, index=self._data["index"])
with open(filename, 'wb') as f:
pickle.dump(df, f)
class FixTracks(QWidget):
@ -345,9 +352,11 @@ class FixTracks(QWidget):
# tablebox.addLayout(tracktwo_box)
self._saveBtn = QPushButton("Save")
self._saveBtn.setShortcut("Ctrl+S")
self._saveBtn.setEnabled(False)
self._saveBtn.clicked.connect(self.on_save)
self._backBtn = QPushButton("Back")
self._backBtn.setShortcut("ESC")
self._backBtn.clicked.connect(self.on_back)
self._data_combo = QComboBox()
@ -472,9 +481,27 @@ class FixTracks(QWidget):
self._data.setData(self._reader.asdict)
self._timeline.setDetectionData(self._data.data)
self.update()
self._saveBtn.setEnabled(True)
def on_save(self):
logging.debug("Save fixtracks results")
logging.debug("Saving fixtracks results")
self._tasklabel.setText("Saving results to file...")
file_dialog = QFileDialog(self)
file_dialog.setAcceptMode(QFileDialog.AcceptMode.AcceptSave)
file_dialog.setNameFilter("Pickle Files (*.pkl)")
if file_dialog.exec():
file_path = file_dialog.selectedFiles()[0]
if not file_path.endswith(".pkl"):
file_path += ".pkl"
self._progress_bar.setRange(0,0)
save_task = PickleWriter(self._data, file_path)
save_task.signals.finished.connect(self.on_dataSaved)
self._threadpool.start(save_task)
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!")
@ -519,7 +546,6 @@ class FixTracks(QWidget):
def main():
from PySide6.QtWidgets import QApplication
app = QApplication([])
window = QWidget()
window.setMinimumSize(200, 200)