[timeline] set window x pos and width

This commit is contained in:
Jan Grewe 2025-01-30 09:18:21 +01:00
parent 8317e61de6
commit c836717aa9

View File

@ -1,5 +1,4 @@
import logging import logging
import pathlib
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
@ -26,10 +25,16 @@ class Window(QGraphicsRectItem):
) )
self._y = y self._y = y
def setWindowX(self, newx):
r = self.rect()
self.setRect(newx, r.y(), self._width, r.height())
self.signals.windowMoved.emit(self.scenePos().x() + self.rect().width() /2, self._width)
def setWindowWidth(self, newwidth): def setWindowWidth(self, newwidth):
self._width = newwidth self._width = newwidth
r = self.rect() r = self.rect()
self.setRect(r.x(), r.y(), newwidth, r.height()) self.setRect(r.x(), r.y(), self._width, r.height())
self.signals.windowMoved.emit(self.scenePos().x() + self.rect().width() /2, self._width)
def mouseMoveEvent(self, event): def mouseMoveEvent(self, event):
# print(event.scenePos()) # print(event.scenePos())
@ -66,7 +71,7 @@ class DetectionTimeline(QWidget):
self._data = detectiondata self._data = detectiondata
self._rangeStart = 0.0 self._rangeStart = 0.0
self._rangeStop = 0.005 self._rangeStop = 0.005
self._width = 2000 self.total_width = 2000
self._stepCount = 200 self._stepCount = 200
self._bg_brush = QBrush(QColor(20, 20, 20, 255)) self._bg_brush = QBrush(QColor(20, 20, 20, 255))
transparent_brush = QBrush(QColor(200, 200, 200, 64)) transparent_brush = QBrush(QColor(200, 200, 200, 64))
@ -84,10 +89,10 @@ class DetectionTimeline(QWidget):
font.setPointSize(15) font.setPointSize(15)
font.setBold(False) font.setBold(False)
self._window = Window(self._width//2, 0, 100, 60, axis_pen, transparent_brush) self._window = Window(self.total_width//2, 0, 100, 60, axis_pen, transparent_brush)
self._window.signals.windowMoved.connect(self.on_windowMoved) self._window.signals.windowMoved.connect(self.on_windowMoved)
self._scene = QGraphicsScene(QRectF(0, 0, self._width+1, 55.)) self._scene = QGraphicsScene(QRectF(0, 0, self.total_width+1, 55.))
self._scene.setBackgroundBrush(self._bg_brush) self._scene.setBackgroundBrush(self._bg_brush)
self._scene.addItem(self._window) self._scene.addItem(self._window)
@ -186,45 +191,76 @@ class DetectionTimeline(QWidget):
self._rangeStop = np.round(end_pos / scene_width, 3) self._rangeStop = np.round(end_pos / scene_width, 3)
self.signals.windowMoved.emit(self._rangeStart, self._rangeStop) self.signals.windowMoved.emit(self._rangeStart, self._rangeStop)
def setWindowWidth(self, width): def setWindowPos(self, newx: float):
self._window.setWindowWidth(width) """Set the x-position of the selection window.
# TODO add method to change window size Parameters
----------
newx : float
The new x position of the selection window given in percent of the data.
"""
if newx < 0.0:
newx = 0.0
elif newx > 1.0:
newx = 1.0
logging.debug("Set window x tp new position %.3f", newx)
x_rel = np.round(newx * self.total_width)
self._window.setWindowX(x_rel)
def setWindowWidth(self, width: float):
"""Set the width of the selection window.
Parameters
----------
width : float
The width in a range 0.0 to 1.0 (aka 0% to 100% of the span.)
"""
logging.debug("Set window width to new value %.3f of %i total width", width, self.total_width)
span = np.round(width * self.total_width)
self._window.setWindowWidth(span)
def main(): def main():
def back(start_x):
view.setWindowPos(start_x)
def fwd(start_x):
view.setWindowPos(start_x)
def zero():
view.setWindowPos(0.0)
import pickle import pickle
import numpy as np import numpy as np
from IPython import embed from IPython import embed
from PySide6.QtWidgets import QApplication from PySide6.QtWidgets import QApplication, QPushButton, QHBoxLayout
from fixtracks.info import PACKAGE_ROOT from fixtracks.info import PACKAGE_ROOT
datafile = PACKAGE_ROOT / "data/merged_small.pkl" datafile = PACKAGE_ROOT / "data/merged_small.pkl"
with open(datafile, "rb") as f: with open(datafile, "rb") as f:
df = pickle.load(f) df = pickle.load(f)
bg_coords = np.stack(df.keypoints[(df.track != 1) & (df.track != 2)].values,).astype(np.float32)[:,0,:] start_x = 0.1
bg_tracks = df.track[(df.track != 1) & (df.track != 2)].values
bg_ids = df.track[(df.track != 1) & (df.track != 2)].index.values
scnd_coords = np.stack(df.keypoints[(df.track == 2)].values,).astype(np.float32)[:,0,:]
scnd_tracks = df.track[df.track == 2].values
scnd_ids = df.track[(df.track == 2)].index.values
focus_coords = np.stack(df.keypoints[df.track == 1].values,).astype(np.float32)[:,0,:]
focus_tracks = df.track[df.track == 1].values
focus_ids = df.track[(df.track == 2)].index.values
app = QApplication([]) app = QApplication([])
window = QWidget() window = QWidget()
window.setMinimumSize(200, 75) window.setMinimumSize(200, 75)
layout = QVBoxLayout()
view = DetectionTimeline(df) view = DetectionTimeline(df)
fwdBtn = QPushButton(">>")
fwdBtn.clicked.connect(lambda: fwd(0.5))
zeroBtn = QPushButton("0->|")
zeroBtn.clicked.connect(zero)
backBtn = QPushButton("<<")
backBtn.clicked.connect(lambda: back(0.2))
btnLyt = QHBoxLayout()
btnLyt.addWidget(backBtn)
btnLyt.addWidget(zeroBtn)
btnLyt.addWidget(fwdBtn)
view.setWindowPos(start_x)
layout = QVBoxLayout()
layout.addWidget(view) layout.addWidget(view)
# view.setImage(img) layout.addLayout(btnLyt)
# view.addDetections(bg_coords, bg_tracks, bg_ids, background_brush)
# view.addDetections(focus_coords, focus_tracks, focus_ids, focus_brush)
# view.addDetections(scnd_coords, scnd_tracks, scnd_ids, second_brush)
window.setLayout(layout) window.setLayout(layout)
window.show() window.show()
app.exec() app.exec()