From 3a2622e8c3ef50abfceb427df7b74c332e16883a Mon Sep 17 00:00:00 2001 From: Samuel Garcia Date: Mon, 23 Mar 2026 15:51:49 +0100 Subject: [PATCH 1/2] better handling of scrool --- spikeinterface_gui/traceview.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/spikeinterface_gui/traceview.py b/spikeinterface_gui/traceview.py index 8a461ffd..adf349b7 100644 --- a/spikeinterface_gui/traceview.py +++ b/spikeinterface_gui/traceview.py @@ -168,13 +168,16 @@ def _qt_initialize_plot(self): self.gains = None self.offsets = None - def _qt_update_scroll_limits(self): + def _qt_update_scroll_step(self): segment_index = self.controller.get_time()[1] length = self.controller.get_num_samples(segment_index) + self.scrool_step = length / 2**16 + t_start, t_stop = self.controller.get_t_start_t_stop() self.timeseeker.set_start_stop(t_start, t_stop, seek=False) + self.scroll_time.setMinimum(0) - self.scroll_time.setMaximum(length - 1) + self.scroll_time.setMaximum(2**16 -1) def _qt_change_segment(self, segment_index): #TODO: dirty because now seg_pos IS segment_index @@ -183,7 +186,7 @@ def _qt_change_segment(self, segment_index): if segment_index != self.combo_seg.currentIndex(): self.combo_seg.setCurrentIndex(segment_index) - self._qt_update_scroll_limits() + self._qt_update_scroll_step() if not self._block_auto_refresh_and_notify: self.refresh() self.notify_time_info_updated() @@ -214,7 +217,8 @@ def _qt_xsize_zoom(self, xmove): self.spinbox_xsize.setValue(newsize) def _qt_on_scroll_time(self, val): - time = self.controller.sample_index_to_time(val) + sample = val * self.scrool_step + time = self.controller.sample_index_to_time(sample) self.timeseeker.seek(time) def _qt_seek_with_selected_spike(self): @@ -467,7 +471,7 @@ def _qt_make_layout(self): self.scroll_time.valueChanged.connect(self._qt_on_scroll_time) - self._qt_update_scroll_limits() + self._qt_update_scroll_step() def _qt_on_settings_changed(self): # adjust xsize spinbox bounds, and adjust xsize if out of bounds @@ -500,9 +504,10 @@ def _qt_seek(self, t): sr = self.controller.sampling_frequency self.scroll_time.valueChanged.disconnect(self._qt_on_scroll_time) - value = self.controller.time_to_sample_index(t) + sample = self.controller.time_to_sample_index(t) + value = sample / self.scrool_step self.scroll_time.setValue(value) - self.scroll_time.setPageStep(int(sr*xsize)) + # self.scroll_time.setPageStep(int(sr*xsize)) self.scroll_time.valueChanged.connect(self._qt_on_scroll_time) visible_channel_inds = self.get_visible_channel_inds() From 3b36e1d0c51ce96eda71abc1a1e1f109f217e2ee Mon Sep 17 00:00:00 2001 From: Alessio Buccino Date: Mon, 23 Mar 2026 17:36:24 +0100 Subject: [PATCH 2/2] Fix step as int --- spikeinterface_gui/traceview.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/spikeinterface_gui/traceview.py b/spikeinterface_gui/traceview.py index adf349b7..aaf0cf84 100644 --- a/spikeinterface_gui/traceview.py +++ b/spikeinterface_gui/traceview.py @@ -171,13 +171,14 @@ def _qt_initialize_plot(self): def _qt_update_scroll_step(self): segment_index = self.controller.get_time()[1] length = self.controller.get_num_samples(segment_index) - self.scrool_step = length / 2**16 + num_scrollbar_steps = max(2**16, length) + self.scroll_step = length / num_scrollbar_steps t_start, t_stop = self.controller.get_t_start_t_stop() self.timeseeker.set_start_stop(t_start, t_stop, seek=False) self.scroll_time.setMinimum(0) - self.scroll_time.setMaximum(2**16 -1) + self.scroll_time.setMaximum(num_scrollbar_steps - 1) def _qt_change_segment(self, segment_index): #TODO: dirty because now seg_pos IS segment_index @@ -185,8 +186,8 @@ def _qt_change_segment(self, segment_index): if segment_index != self.combo_seg.currentIndex(): self.combo_seg.setCurrentIndex(segment_index) + self._qt_update_scroll_step() - self._qt_update_scroll_step() if not self._block_auto_refresh_and_notify: self.refresh() self.notify_time_info_updated() @@ -217,7 +218,7 @@ def _qt_xsize_zoom(self, xmove): self.spinbox_xsize.setValue(newsize) def _qt_on_scroll_time(self, val): - sample = val * self.scrool_step + sample = int(val * self.scroll_step) time = self.controller.sample_index_to_time(sample) self.timeseeker.seek(time) @@ -501,13 +502,11 @@ def _qt_seek(self, t): xsize = self.xsize t1, t2 = t - xsize/3., t + xsize * 2/3. - sr = self.controller.sampling_frequency self.scroll_time.valueChanged.disconnect(self._qt_on_scroll_time) sample = self.controller.time_to_sample_index(t) - value = sample / self.scrool_step + value = int(sample / self.scroll_step) self.scroll_time.setValue(value) - # self.scroll_time.setPageStep(int(sr*xsize)) self.scroll_time.valueChanged.connect(self._qt_on_scroll_time) visible_channel_inds = self.get_visible_channel_inds()