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 import logging
from PyQt6.QtWidgets import QWidget, QGridLayout, QVBoxLayout, QLabel, QPushButton, QFileDialog, QHBoxLayout, QComboBox, QSizePolicy, QSpinBox from PyQt6.QtWidgets import QWidget, QGridLayout, QVBoxLayout, QLabel, QPushButton, QComboBox, QSizePolicy, QSpinBox, QGraphicsView, QGraphicsScene
from PyQt6.QtCore import QThreadPool from PyQt6.QtCore import QThreadPool, QLineF, QPointF
from PyQt6.QtGui import QImage, QPixmap from PyQt6.QtGui import QImage, QPixmap, QColor, QPen
from fixtracks.util import ImageReader from fixtracks.util import ImageReader
@ -23,8 +23,10 @@ class MergeDetections(QWidget):
self.left_datacombo.addItems(self._files) self.left_datacombo.addItems(self._files)
self.left_videocombo.addItems(self._files) self.left_videocombo.addItems(self._files)
self.left_posspinner = QSpinBox() 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_preview.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
self.left_line = None
self.right_datacombo = QComboBox() self.right_datacombo = QComboBox()
self.right_videocombo = QComboBox() self.right_videocombo = QComboBox()
@ -33,8 +35,16 @@ class MergeDetections(QWidget):
self.right_posspinner = QSpinBox() self.right_posspinner = QSpinBox()
self.right_preview = QLabel() self.right_preview = QLabel()
self.right_preview.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding) self.right_preview.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
self.right_line = None
layout.addLayout(self.layout_controls()) 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) self.setLayout(layout)
def layout_controls(self): def layout_controls(self):
@ -43,7 +53,6 @@ class MergeDetections(QWidget):
grd.addWidget(QLabel("Data"), 1, 0) grd.addWidget(QLabel("Data"), 1, 0)
grd.addWidget(QLabel("Video"), 2, 0) grd.addWidget(QLabel("Video"), 2, 0)
grd.addWidget(QLabel("Mergeline"), 3, 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_datacombo, 1, 1)
grd.addWidget(self.left_videocombo, 2, 1) grd.addWidget(self.left_videocombo, 2, 1)
grd.addWidget(self.left_posspinner, 3, 1) grd.addWidget(self.left_posspinner, 3, 1)
@ -52,7 +61,6 @@ class MergeDetections(QWidget):
grd.addWidget(QLabel("Data"), 1, 2) grd.addWidget(QLabel("Data"), 1, 2)
grd.addWidget(QLabel("Video"), 2, 2) grd.addWidget(QLabel("Video"), 2, 2)
grd.addWidget(QLabel("Mergeline"), 3, 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_datacombo, 1, 3)
grd.addWidget(self.right_videocombo, 2, 3) grd.addWidget(self.right_videocombo, 2, 3)
grd.addWidget(self.right_posspinner, 3, 3) grd.addWidget(self.right_posspinner, 3, 3)
@ -63,8 +71,7 @@ class MergeDetections(QWidget):
grd.setColumnStretch(3, 50) grd.setColumnStretch(3, 50)
grd.setColumnMinimumWidth(0, 50) grd.setColumnMinimumWidth(0, 50)
grd.setColumnMinimumWidth(2, 50) grd.setColumnMinimumWidth(2, 50)
grd.setColumnStretch(1, 1) # grd.setRowStretch(4, 100)
grd.setRowStretch(4, 100)
return grd return grd
@property @property
@ -111,6 +118,9 @@ class MergeDetections(QWidget):
bytesPerLine = 3 * width bytesPerLine = 3 * width
img = QImage(frame.data, width, height, bytesPerLine, QImage.Format.Format_BGR888).rgbSwapped() 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_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): def on_leftvideoSelection(self):
logging.debug("Video selection of the %s side", "left") logging.debug("Video selection of the %s side", "left")
@ -124,4 +134,22 @@ class MergeDetections(QWidget):
height, width, _ = frame.shape height, width, _ = frame.shape
bytesPerLine = 3 * width bytesPerLine = 3 * width
img = QImage(frame.data, width, height, bytesPerLine, QImage.Format.Format_BGR888).rgbSwapped() 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())