fixtracks/fixtracks/dialogs/previewdialog.py
2025-01-24 17:21:34 +01:00

82 lines
2.6 KiB
Python

import logging
from PySide6.QtWidgets import QDialog, QVBoxLayout, QHBoxLayout, QPushButton, QFileDialog, QProgressBar
from PySide6.QtCore import QThreadPool
from PySide6.QtGui import QImage
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)
btn_box = QHBoxLayout()
btn_box.addWidget(self._opendataBtn)
layout = QVBoxLayout()
layout.addLayout(btn_box)
layout.addWidget(self.merge_preview)
layout.addWidget(self._progress_bar)
self.setLayout(layout)
def on_openData(self):
infile = None
imgfile = None
file_dialog = QFileDialog(self, "Select merged image")
file_dialog.setFileMode(QFileDialog.ExistingFile)
file_dialog.setNameFilters([
"Image Files (*.png *.jpg *.jpeg)",
"All Files (*)"
])
if file_dialog.exec():
imgfile = file_dialog.selectedFiles()[0]
if imgfile is not None:
img = QImage(imgfile)
self.merge_preview.setImage(img)
file_dialog = QFileDialog(self, "Select pickled DataFrame", "", "Pandas DataFrame (*.pkl)")
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.setDataframe(self._df)
self._reader = None
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()