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