started preview and added pyproject toml

This commit is contained in:
Jan Grewe 2025-01-21 17:41:12 +01:00
parent e039d74d1a
commit 7b4c2f35eb
7 changed files with 201 additions and 14 deletions

View File

View File

@ -0,0 +1,83 @@
import logging
import pickle
import pandas as pd
from PySide6.QtWidgets import QDialog, QVBoxLayout, QHBoxLayout, QPushButton, QFileDialog, QProgressBar
from PySide6.QtCore import QThreadPool
from fixtracks.widgets.mergepreview import MergePreview
from fixtracks.utils.reader import PickleLoader
class PreviewDialog(QDialog):
def __init__(self, parent=None):
super().__init__(parent)
self._threadpool = QThreadPool(self)
self._df = None
self._reader = None
self.setWindowTitle("Merge Preview")
self._progress_bar = QProgressBar(self)
# self._progress_bar.setRange(0, 0) # Set the progress bar to be indeterminate
self._progress_bar.setValue(0)
self.merge_preview = MergePreview(parent=self)
self._opendataBtn = QPushButton("open data")
self._opendataBtn.clicked.connect(self.on_openData)
self._openleftBtn = QPushButton("open left video")
self._openleftBtn.clicked.connect(self.on_openleftVideo)
self._openrightBtn = QPushButton("open right video")
self._openrightBtn.clicked.connect(self.on_openrightVideo)
btn_box = QHBoxLayout()
btn_box.addWidget(self._opendataBtn)
btn_box.addWidget(self._openleftBtn)
btn_box.addWidget(self._openrightBtn)
layout = QVBoxLayout()
layout.addLayout(btn_box)
layout.addWidget(self.merge_preview)
layout.addWidget(self._progress_bar)
self.setLayout(layout)
def on_openData(self):
file_dialog = QFileDialog(self, "Select pickled DataFrame", "", "Pandas DataFrame (*.pkl)")
infile = None
if file_dialog.exec():
infile = file_dialog.selectedFiles()[0]
if infile is not None:
self._progress_bar.setRange(0,0)
self._reader = PickleLoader(infile)
self._reader.signals.finished.connect(self._on_dataOpenend)
self._threadpool.start(self._reader)
def _on_dataOpenend(self, state):
self._progress_bar.setRange(0, 100)
self._progress_bar.setValue(0)
if state and self._reader is not None:
self._df = self._reader.data
self.merge_preview.set_dataframe(self._df)
self._reader = None
def on_openleftVideo(self):
pass
def on_openrightVideo(self):
pass
def main():
from PySide6.QtWidgets import QApplication
import sys
app = QApplication(sys.argv)
dialog = PreviewDialog()
dialog.show()
sys.exit(app.exec())
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO, force=True)
main()

View File

@ -1,13 +1,12 @@
from PySide6.QtCore import QSize, Qt
from PySide6.QtWidgets import QMainWindow, QWidget, QToolBar, QMenu, QMenuBar, QSizePolicy, QFileDialog
from PySide6.QtWidgets import QDialog, QVBoxLayout
from PySide6.QtGui import QKeySequence, QAction, QIcon
from fixtracks.widgets.centralwidget import CentralWidget
import fixtracks.resources
# Subclass QMainWindow to customize your application's main window
from fixtracks.widgets.centralwidget import CentralWidget
from fixtracks.dialogs.previewdialog import PreviewDialog
from fixtracks.utils.reader import ImageReader, DataFrameReader
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
@ -54,10 +53,14 @@ class MainWindow(QMainWindow):
self._help_action = QAction(QIcon(":help"), "help")
self._help_action.setStatusTip("Show help dialog")
self._help_action.setShortcut(QKeySequence("F1"))
self._help_action.setEnabled(True)
self._help_action.triggered.connect(self.on_help)
self._mergeview_action = QAction("View merge results")
self._mergeview_action.setStatusTip("Show help dialog")
self._mergeview_action.setEnabled(True)
self._mergeview_action.triggered.connect(self.on_mergeview)
self.create_toolbar()
self.create_menu()
@ -71,7 +74,7 @@ class MainWindow(QMainWindow):
plot_menu = menu.addMenu("&Plot")
# plot_menu.addAction(self._plot_action)
# plot_menu.addAction(self._table_action)
plot_menu.addAction(self._mergeview_action)
help_menu = menu.addMenu("&Help")
help_menu.addAction(self._about_action)
@ -104,7 +107,6 @@ class MainWindow(QMainWindow):
# self._toolbar.topLevelChanged.connect(self.tb_changed)
# del settings
def on_file_open(self, s):
QFileDialog.getExistingDirectory()
# dlg = QFileDialog(self, 'Open dataset folder data file', '', "NIX files (*.h5 *.nix)")
@ -114,6 +116,12 @@ class MainWindow(QMainWindow):
# filenames = dlg.selectedFiles()
# self.open_file(filenames[0])
def on_mergeview(self):
print("Display merging results")
dlg = PreviewDialog(self)
dlg.setModal(True)
dlg.exec()
def on_about(self, s):
pass

View File

@ -1,4 +1,5 @@
import logging
import pickle
import cv2 as cv
import pandas as pd
@ -50,6 +51,32 @@ class ImageReader(QRunnable):
def frame(self):
return self._frame
class PickleLoader(QRunnable):
finished = Signal(bool)
def __init__(self, filename) -> None:
super().__init__()
self._filename = filename
self._signals = ProducerSignals()
self._data = None
@Slot()
def run(self):
'''
Your code goes in this function
'''
logging.debug("PickleLoader: trying to open file %s", self._filename)
with open(self._filename, "rb") as f:
self._data = pickle.load(f)
self._signals.finished.emit(True)
@property
def signals(self):
return self._signals
@property
def data(self):
return self._data
class DataFrameReader(QRunnable):
finished = Signal(bool)

View File

@ -0,0 +1,53 @@
import logging
import numpy as np
from PySide6.QtWidgets import QWidget, QGridLayout, QVBoxLayout, QHBoxLayout, QLabel, QPushButton, QComboBox, QSizePolicy, QSpinBox, QGraphicsView, QGraphicsScene, QGraphicsLineItem, QSpacerItem, QProgressDialog, QFileDialog, QSlider
from PySide6.QtCore import Qt
from fixtracks.utils.reader import ImageReader
class MergePreview(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self._dataframe = None
self._image = None
self._startSlider = QSlider(orientation=Qt.Orientation.Horizontal)
self._stopSlider = QSlider(orientation=Qt.Orientation.Horizontal)
self._startSlider.setRange(0, 100)
self._stopSlider.setRange(0, 100)
self._startSlider.valueChanged.connect(self._on_start_slider_changed)
self._stopSlider.valueChanged.connect(self._on_stop_slider_changed)
layout = QVBoxLayout()
layout.addWidget(QLabel("Start Slider"))
layout.addWidget(self._startSlider)
layout.addWidget(QLabel("Stop Slider"))
layout.addWidget(self._stopSlider)
self.setLayout(layout)
def resetSlider(self, framecount=100):
self._startSlider.setRange(0, framecount)
self._stopSlider.setRange(0, framecount)
self._startSlider.setSliderPosition(0)
self._stopSlider.setSliderPosition(framecount)
def set_dataframe(self, newdf):
self._dataframe = newdf
self.resetSlider(np.max(self._dataframe.frame))
def _on_start_slider_changed(self, value):
if value > self._stopSlider.value():
self._stopSlider.setValue(value)
def _on_stop_slider_changed(self, value):
if value < self._startSlider.value():
self._startSlider.setValue(value)
@staticmethod
def mergeImages(left, right, left_cut, right_cut):
pass

16
pyproject.toml Normal file
View File

@ -0,0 +1,16 @@
[tool.poetry]
name = "fixtracks"
version = "0.1.0"
description = "A project to fix track metadata"
authors = ["Your Name <your.email@example.com>"]
license = "MIT"
[tool.poetry.dependencies]
python = "^3.8"
[tool.poetry.dev-dependencies]
pytest = "^6.2.4"
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"