diff --git a/fixtracks/centralwidget.py b/fixtracks/centralwidget.py index 2858499..8b9a5e6 100644 --- a/fixtracks/centralwidget.py +++ b/fixtracks/centralwidget.py @@ -1,5 +1,6 @@ import logging from PyQt6.QtWidgets import QWidget, QStackedLayout +from PyQt6.QtCore import Qt from fixtracks.taskwidgets import FixTracks from fixtracks.detectionmerge import MergeDetections @@ -10,7 +11,9 @@ class CentralWidget(QWidget): def __init__(self, parent=None): super().__init__(parent) layout = QStackedLayout() + layout.setAlignment(Qt.AlignmentFlag.AlignVCenter) self._tw = TasksWidget() + self._tw.setMaximumHeight(200) self._tw.clicked.connect(self._select_task) self._tasksindex = layout.addWidget(self._tw) self._mergewidget = MergeDetections(self) diff --git a/fixtracks/detectionmerge.py b/fixtracks/detectionmerge.py index 38204a2..697f5c3 100644 --- a/fixtracks/detectionmerge.py +++ b/fixtracks/detectionmerge.py @@ -8,14 +8,15 @@ from fixtracks.util import ImageReader class VideoPreview(QWidget): - def __init__(self, parent=None): - super().__init__(parent) + def __init__(self, left=True, parent=None): + super().__init__(None) self._image = None self._line_pen = QPen(QColor.fromString("red"), 4) self._view = QGraphicsView() self._view.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding) self._scene = None self._pixmap = None + self._left = left layout = QVBoxLayout() layout.addWidget(self._view) self.setLayout(layout) @@ -26,7 +27,7 @@ class VideoPreview(QWidget): self._view.setScene(self._scene) self._view.fitInView(self._scene.sceneRect(), mode=Qt.AspectRatioMode.KeepAspectRatio) image_rect = self._pixmap.boundingRect() - start_x = image_rect.right() + start_x = image_rect.right() if self._left else image_rect.left() start_y = image_rect.top() end_y = image_rect.bottom() @@ -62,7 +63,7 @@ class MergeDetections(QWidget): self.left_videocombo.addItems(self._files) self.left_posspinner = QSpinBox() self.left_posspinner.valueChanged.connect(self.on_leftmergelinemove) - self.left_preview = VideoPreview(self) + self.left_preview = VideoPreview() self.right_datacombo = QComboBox() self.right_videocombo = QComboBox() @@ -70,7 +71,7 @@ class MergeDetections(QWidget): self.right_videocombo.addItems(self._files) self.right_posspinner = QSpinBox() self.right_posspinner.valueChanged.connect(self.on_rightmergelinemove) - self.right_preview = VideoPreview(self) + self.right_preview = VideoPreview(left=False) layout.addLayout(self.layout_controls()) splitter = QGridLayout() @@ -106,7 +107,6 @@ class MergeDetections(QWidget): grd.setColumnStretch(3, 50) grd.setColumnMinimumWidth(0, 50) grd.setColumnMinimumWidth(2, 50) - # grd.setRowStretch(4, 100) return grd @property @@ -138,13 +138,11 @@ class MergeDetections(QWidget): self.right_datacombo.setCurrentIndex(0) self.right_videocombo.currentIndexChanged.connect(self.on_rightvideoSelection) self.left_videocombo.currentIndexChanged.connect(self.on_leftvideoSelection) - # self._files = file_list def _toImage(self, frame): height, width, _ = frame.shape bytesPerLine = 3 * width img = QImage(frame.data, width, height, bytesPerLine, QImage.Format.Format_BGR888).rgbSwapped() - # pm = QPixmap.fromImage(img) return img def on_rightvideoSelection(self): @@ -159,7 +157,7 @@ class MergeDetections(QWidget): img = self._toImage(frame) self.right_preview.set_image(img) self.right_posspinner.setMaximum(img.width() - 1) - self.right_posspinner.setValue(img.width() - 1) + self.right_posspinner.setValue(0) def on_leftvideoSelection(self): logging.debug("Video selection of the %s side", "left") @@ -178,5 +176,5 @@ class MergeDetections(QWidget): def on_leftmergelinemove(self): self.left_preview.set_lineposition(self.left_posspinner.value()) - def on_leftmergelinemove(self): + def on_rightmergelinemove(self): self.right_preview.set_lineposition(self.right_posspinner.value()) diff --git a/fixtracks/taskwidget.py b/fixtracks/taskwidget.py index 167cb70..a967355 100644 --- a/fixtracks/taskwidget.py +++ b/fixtracks/taskwidget.py @@ -1,8 +1,8 @@ import logging import pathlib -from PyQt6.QtWidgets import QWidget, QVBoxLayout, QLabel, QPushButton, QFileDialog -from PyQt6.QtCore import pyqtSignal +from PyQt6.QtWidgets import QWidget, QHBoxLayout, QVBoxLayout, QLabel, QPushButton, QFileDialog, QSizePolicy +from PyQt6.QtCore import pyqtSignal, Qt class TasksWidget(QWidget): @@ -10,20 +10,28 @@ class TasksWidget(QWidget): def __init__(self, parent = None): super().__init__(parent) - l = QVBoxLayout() - l.addWidget(QLabel("Tasks:")) + l = QHBoxLayout() + l.setAlignment(Qt.AlignmentFlag.AlignVCenter) folderBtn = QPushButton("Select data folder") folderBtn.setEnabled(True) + folderBtn.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding) folderBtn.clicked.connect(self._open_folder) l.addWidget(folderBtn) + + sublayout = QVBoxLayout() self.mergeBtn = QPushButton("Merge detections") self.mergeBtn.setEnabled(False) self.mergeBtn.clicked.connect(self._merge_clicked) + self.mergeBtn.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding) + self.tracksBtn = QPushButton("Join tracks") self.tracksBtn.setEnabled(False) self.tracksBtn.clicked.connect(self._tracks_clicked) - l.addWidget(self.mergeBtn) - l.addWidget(self.tracksBtn) + self.tracksBtn.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding) + + sublayout.addWidget(self.mergeBtn) + sublayout.addWidget(self.tracksBtn) + l.addLayout(sublayout) self.setLayout(l) self._file_list = []