[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 pandas as pd
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.QtGui import QBrush, QColor, QPen, QFont
@ -107,6 +108,9 @@ class DetectionTimeline(QWidget):
self._view = QGraphicsView()
# self._view.setRenderHints(QPainter.RenderHint.Antialiasing | QPainter.RenderHint.SmoothPixmapTransform);
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.setDefaultTextColor(self._t1_pen.color())
@ -120,17 +124,19 @@ class DetectionTimeline(QWidget):
other_label.setDefaultTextColor(self._other_pen.color())
other_label.setPos(0, 30)
self._view.setScene(self._scene)
self._view.fitInView(self._scene.sceneRect(), aspectRadioMode=Qt.AspectRatioMode.KeepAspectRatio)
self._position_label = QLabel("")
f = self._position_label.font()
f.setPointSize(9)
self._position_label.setFont(f)
layout = QVBoxLayout()
layout.addWidget(self._view)
layout.addWidget(self._position_label, Qt.AlignmentFlag.AlignRight)
self.setLayout(layout)
if self._data is not None:
self.draw_coverage()
self.fit_scene_to_view()
self.setMaximumHeight(100)
# self.setMaximumHeight(100)
# self.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed)
def setDetectionData(self, data):
@ -149,7 +155,7 @@ class DetectionTimeline(QWidget):
track1_frames = self._data.frame.values[self._data.track == self._trackone]
track2_frames = self._data.frame.values[self._data.track == self._tracktwo]
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):
maxframe = np.max(self._data["frame"])
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 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
def rangeStart(self):
return self._rangeStart
@ -194,6 +205,7 @@ class DetectionTimeline(QWidget):
self._rangeStart = np.round(self._window.sceneBoundingRect().left() / 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)
self.updatePosition()
self.signals.windowMoved.emit()
def setWindowPos(self, newx: float):