switch to QGraphicsview
This commit is contained in:
parent
45811c84ad
commit
5346e81ff6
@ -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())
|
Loading…
Reference in New Issue
Block a user