[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 pathlib
import numpy as np
import pandas as pd
from PySide6.QtCore import Qt
@ -26,10 +25,16 @@ class Window(QGraphicsRectItem):
)
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):
self._width = newwidth
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):
# print(event.scenePos())
@ -66,7 +71,7 @@ class DetectionTimeline(QWidget):
self._data = detectiondata
self._rangeStart = 0.0
self._rangeStop = 0.005
self._width = 2000
self.total_width = 2000
self._stepCount = 200
self._bg_brush = QBrush(QColor(20, 20, 20, 255))
transparent_brush = QBrush(QColor(200, 200, 200, 64))
@ -84,10 +89,10 @@ class DetectionTimeline(QWidget):
font.setPointSize(15)
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._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.addItem(self._window)
@ -186,45 +191,76 @@ class DetectionTimeline(QWidget):
self._rangeStop = np.round(end_pos / scene_width, 3)
self.signals.windowMoved.emit(self._rangeStart, self._rangeStop)
def setWindowWidth(self, width):
self._window.setWindowWidth(width)
# TODO add method to change window size
def setWindowPos(self, newx: float):
"""Set the x-position of the selection window.
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 back(start_x):
view.setWindowPos(start_x)
def fwd(start_x):
view.setWindowPos(start_x)
def zero():
view.setWindowPos(0.0)
import pickle
import numpy as np
from IPython import embed
from PySide6.QtWidgets import QApplication
from PySide6.QtWidgets import QApplication, QPushButton, QHBoxLayout
from fixtracks.info import PACKAGE_ROOT
datafile = PACKAGE_ROOT / "data/merged_small.pkl"
with open(datafile, "rb") as f:
df = pickle.load(f)
bg_coords = np.stack(df.keypoints[(df.track != 1) & (df.track != 2)].values,).astype(np.float32)[:,0,:]
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
start_x = 0.1
app = QApplication([])
window = QWidget()
window.setMinimumSize(200, 75)
layout = QVBoxLayout()
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)
# view.setImage(img)
# 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)
layout.addLayout(btnLyt)
window.setLayout(layout)
window.show()
app.exec()