[timeline] add position label

This commit is contained in:
Jan Grewe 2025-02-02 18:03:30 +01:00
parent cdfc2069c8
commit 4f18387c2f

View File

@ -2,7 +2,8 @@ import logging
import numpy as np import numpy as np
import pandas as pd import pandas as pd
from PySide6.QtCore import Qt from PySide6.QtCore import Qt
from PySide6.QtWidgets import QWidget, QVBoxLayout, QSizePolicy, QGraphicsView, QGraphicsScene, QGraphicsItem, QGraphicsRectItem, QGraphicsLineItem from PySide6.QtWidgets import QWidget, QVBoxLayout, QSizePolicy, QLabel
from PySide6.QtWidgets import QGraphicsView, QGraphicsScene, QGraphicsItem, QGraphicsRectItem, QGraphicsLineItem
from PySide6.QtCore import Qt, QRectF, QRectF from PySide6.QtCore import Qt, QRectF, QRectF
from PySide6.QtGui import QBrush, QColor, QPen, QFont from PySide6.QtGui import QBrush, QColor, QPen, QFont
@ -107,6 +108,9 @@ class DetectionTimeline(QWidget):
self._view = QGraphicsView() self._view = QGraphicsView()
# self._view.setRenderHints(QPainter.RenderHint.Antialiasing | QPainter.RenderHint.SmoothPixmapTransform); # self._view.setRenderHints(QPainter.RenderHint.Antialiasing | QPainter.RenderHint.SmoothPixmapTransform);
self._view.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding) self._view.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
self._view.setScene(self._scene)
self._view.fitInView(self._scene.sceneRect(), aspectRadioMode=Qt.AspectRatioMode.KeepAspectRatio)
self.fit_scene_to_view()
t1_label = self._scene.addText("track 1", font) t1_label = self._scene.addText("track 1", font)
t1_label.setDefaultTextColor(self._t1_pen.color()) t1_label.setDefaultTextColor(self._t1_pen.color())
@ -120,17 +124,19 @@ class DetectionTimeline(QWidget):
other_label.setDefaultTextColor(self._other_pen.color()) other_label.setDefaultTextColor(self._other_pen.color())
other_label.setPos(0, 30) other_label.setPos(0, 30)
self._view.setScene(self._scene) self._position_label = QLabel("")
self._view.fitInView(self._scene.sceneRect(), aspectRadioMode=Qt.AspectRatioMode.KeepAspectRatio) f = self._position_label.font()
f.setPointSize(9)
self._position_label.setFont(f)
layout = QVBoxLayout() layout = QVBoxLayout()
layout.addWidget(self._view) layout.addWidget(self._view)
layout.addWidget(self._position_label, Qt.AlignmentFlag.AlignRight)
self.setLayout(layout) self.setLayout(layout)
if self._data is not None: if self._data is not None:
self.draw_coverage() self.draw_coverage()
self.fit_scene_to_view() # self.setMaximumHeight(100)
self.setMaximumHeight(100)
# self.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed) # self.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed)
def setDetectionData(self, data): def setDetectionData(self, data):
@ -149,7 +155,7 @@ class DetectionTimeline(QWidget):
track1_frames = self._data.frame.values[self._data.track == self._trackone] track1_frames = self._data.frame.values[self._data.track == self._trackone]
track2_frames = self._data.frame.values[self._data.track == self._tracktwo] track2_frames = self._data.frame.values[self._data.track == self._tracktwo]
other_frames = self._data.frame.values[(self._data.track != self._trackone) & other_frames = self._data.frame.values[(self._data.track != self._trackone) &
(self._data.track != self._tracktwo)] (self._data.track != self._tracktwo)]
elif isinstance(self._data, dict): elif isinstance(self._data, dict):
maxframe = np.max(self._data["frame"]) maxframe = np.max(self._data["frame"])
bins = np.linspace(0, maxframe, self._stepCount) bins = np.linspace(0, maxframe, self._stepCount)
@ -172,6 +178,11 @@ class DetectionTimeline(QWidget):
if t2_coverage[i]: self._scene.addLine(pos[i], 17, pos[i], 32., pen=self._t2_pen) if t2_coverage[i]: self._scene.addLine(pos[i], 17, pos[i], 32., pen=self._t2_pen)
if other_coverage[i]: self._scene.addLine(pos[i], 34, pos[i], 49., pen=self._other_pen) if other_coverage[i]: self._scene.addLine(pos[i], 34, pos[i], 49., pen=self._other_pen)
def updatePosition(self):
start = np.round(self._rangeStart * 100, 1)
stop = np.round(self._rangeStop * 100, 1)
self._position_label.setText(f"Current position: {start}% to {stop}% of data.")
@property @property
def rangeStart(self): def rangeStart(self):
return self._rangeStart return self._rangeStart
@ -194,6 +205,7 @@ class DetectionTimeline(QWidget):
self._rangeStart = np.round(self._window.sceneBoundingRect().left() / scene_width, 3) self._rangeStart = np.round(self._window.sceneBoundingRect().left() / scene_width, 3)
self._rangeStop = np.round(self._window.sceneBoundingRect().right() / scene_width, 3) self._rangeStop = np.round(self._window.sceneBoundingRect().right() / scene_width, 3)
logging.debug("Timeline: WindowUpdated positions start: %.3f end: %.3f", self.rangeStart, self.rangeStop) logging.debug("Timeline: WindowUpdated positions start: %.3f end: %.3f", self.rangeStart, self.rangeStop)
self.updatePosition()
self.signals.windowMoved.emit() self.signals.windowMoved.emit()
def setWindowPos(self, newx: float): def setWindowPos(self, newx: float):