switch to QGraphicsview

This commit is contained in:
Jan Grewe 2024-12-20 17:45:49 +01:00
parent 45811c84ad
commit 5346e81ff6

View File

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