From 5346e81ff6762ef840de6b1b6d8880f8ccd827af Mon Sep 17 00:00:00 2001 From: Jan Grewe Date: Fri, 20 Dec 2024 17:45:49 +0100 Subject: [PATCH] switch to QGraphicsview --- fixtracks/detectionmerge.py | 46 +++++++++++++++++++++++++++++-------- 1 file changed, 37 insertions(+), 9 deletions(-) diff --git a/fixtracks/detectionmerge.py b/fixtracks/detectionmerge.py index 40f0962..4cfd1a2 100644 --- a/fixtracks/detectionmerge.py +++ b/fixtracks/detectionmerge.py @@ -1,8 +1,8 @@ import logging -from PyQt6.QtWidgets import QWidget, QGridLayout, QVBoxLayout, QLabel, QPushButton, QFileDialog, QHBoxLayout, QComboBox, QSizePolicy, QSpinBox -from PyQt6.QtCore import QThreadPool -from PyQt6.QtGui import QImage, QPixmap +from PyQt6.QtWidgets import QWidget, QGridLayout, QVBoxLayout, QLabel, QPushButton, QComboBox, QSizePolicy, QSpinBox, QGraphicsView, QGraphicsScene +from PyQt6.QtCore import QThreadPool, QLineF, QPointF +from PyQt6.QtGui import QImage, QPixmap, QColor, QPen from fixtracks.util import ImageReader @@ -23,8 +23,10 @@ class MergeDetections(QWidget): self.left_datacombo.addItems(self._files) self.left_videocombo.addItems(self._files) self.left_posspinner = QSpinBox() - self.left_preview = QLabel() + self.left_posspinner.valueChanged.connect(self.on_leftmergelinemove) + self.left_preview = QGraphicsView() self.left_preview.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding) + self.left_line = None self.right_datacombo = QComboBox() self.right_videocombo = QComboBox() @@ -33,8 +35,16 @@ class MergeDetections(QWidget): self.right_posspinner = QSpinBox() self.right_preview = QLabel() self.right_preview.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding) + self.right_line = None layout.addLayout(self.layout_controls()) + splitter = QGridLayout() + # splitter.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding) + splitter.addWidget(self.left_preview, 0, 0) + splitter.addWidget(self.right_preview, 0, 1) + splitter.setColumnStretch(0, 1) + splitter.setColumnStretch(1, 1) + layout.addLayout(splitter) self.setLayout(layout) def layout_controls(self): @@ -43,7 +53,6 @@ class MergeDetections(QWidget): grd.addWidget(QLabel("Data"), 1, 0) grd.addWidget(QLabel("Video"), 2, 0) grd.addWidget(QLabel("Mergeline"), 3, 0) - grd.addWidget(self.left_preview, 4, 0, 1, 2) grd.addWidget(self.left_datacombo, 1, 1) grd.addWidget(self.left_videocombo, 2, 1) grd.addWidget(self.left_posspinner, 3, 1) @@ -52,7 +61,6 @@ class MergeDetections(QWidget): grd.addWidget(QLabel("Data"), 1, 2) grd.addWidget(QLabel("Video"), 2, 2) grd.addWidget(QLabel("Mergeline"), 3, 2) - grd.addWidget(self.right_preview, 4, 2, 1, 2) grd.addWidget(self.right_datacombo, 1, 3) grd.addWidget(self.right_videocombo, 2, 3) grd.addWidget(self.right_posspinner, 3, 3) @@ -63,8 +71,7 @@ class MergeDetections(QWidget): grd.setColumnStretch(3, 50) grd.setColumnMinimumWidth(0, 50) grd.setColumnMinimumWidth(2, 50) - grd.setColumnStretch(1, 1) - grd.setRowStretch(4, 100) + # grd.setRowStretch(4, 100) return grd @property @@ -111,6 +118,9 @@ class MergeDetections(QWidget): bytesPerLine = 3 * width img = QImage(frame.data, width, height, bytesPerLine, QImage.Format.Format_BGR888).rgbSwapped() self.right_preview.setPixmap(QPixmap.fromImage(img).scaledToHeight(self.right_preview.height())) + self.right_posspinner.setMaximum(width) + self.left_posspinner.setValue(width-1) + def on_leftvideoSelection(self): logging.debug("Video selection of the %s side", "left") @@ -124,4 +134,22 @@ class MergeDetections(QWidget): height, width, _ = frame.shape bytesPerLine = 3 * width img = QImage(frame.data, width, height, bytesPerLine, QImage.Format.Format_BGR888).rgbSwapped() - self.left_preview.setPixmap(QPixmap.fromImage(img).scaledToHeight(self.left_preview.height())) + scene = QGraphicsScene() + scene.addPixmap(QPixmap.fromImage(img).scaledToHeight(self.left_preview.height())) + self.left_preview.setScene(scene) + # self.left_preview.setPixmap(QPixmap.fromImage(img).scaledToHeight(self.left_preview.height())) + self.left_posspinner.setMaximum(width-1) + self.left_posspinner.setValue(width-1) + origin = self.left_preview.mapToScene(int(width//2), 0) + destination = self.left_preview.mapToScene(width//2, height) + line = QLineF(origin, destination) + p = QPen(5) + c = QColor.fromString("red") + p.setColor(c) + self.left_line = scene.addLine(line, p) + self.left_preview.show() + + def on_leftmergelinemove(self): + print(self.left_posspinner.value()) + if self.left_line is not None: + self.left_line.setX(self.left_posspinner.value()) \ No newline at end of file