make preview left-right aware

This commit is contained in:
Jan Grewe 2024-12-22 01:00:17 +01:00
parent 37f505a725
commit 1a22362872
3 changed files with 25 additions and 16 deletions

View File

@ -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)

View File

@ -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())

View File

@ -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 = []