[timeline] set window x pos and width
This commit is contained in:
parent
8317e61de6
commit
c836717aa9
@ -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()
|
||||
|
Loading…
Reference in New Issue
Block a user