diff --git a/glue_qt/viewers/common/slice_widget.py b/glue_qt/viewers/common/slice_widget.py index 252c81d7..71f7eaf2 100644 --- a/glue_qt/viewers/common/slice_widget.py +++ b/glue_qt/viewers/common/slice_widget.py @@ -114,14 +114,17 @@ def sync_sliders_from_state(self, *args): world_warning = False world_label = self.data.pixel_component_ids[i].label - slider = SliceWidget(world_label, - hi=self.data.shape[i] - 1, world=world, - world_unit=world_unit, world_warning=world_warning) - - self.slider_state = slider.state - self.slider_state.add_callback('slice_center', self.sync_state_from_sliders) - self._sliders.append(slider) - self.layout.addWidget(slider) + if self.data.shape[i] > 1: + slider = SliceWidget(world_label, + hi=self.data.shape[i] - 1, world=world, + world_unit=world_unit, world_warning=world_warning) + + self.slider_state = slider.state + self.slider_state.add_callback('slice_center', self.sync_state_from_sliders) + self._sliders.append(slider) + self.layout.addWidget(slider) + else: + self._sliders.append(None) for i in range(self.data.ndim): if self._sliders[i] is not None: diff --git a/glue_qt/viewers/common/tests/test_multi_slice_helper.py b/glue_qt/viewers/common/tests/test_multi_slice_helper.py new file mode 100644 index 00000000..fe37c599 --- /dev/null +++ b/glue_qt/viewers/common/tests/test_multi_slice_helper.py @@ -0,0 +1,33 @@ +from ..data_slice_widget import SliceWidget +from ..slice_widget import MultiSliceWidgetHelper + +from echo import CallbackProperty, HasCallbackProperties +from glue.core import Data +from numpy import arange +from qtpy.QtWidgets import QVBoxLayout + + +class ViewerTestState(HasCallbackProperties): + x_att = CallbackProperty() + y_att = CallbackProperty() + reference_data = CallbackProperty() + slices = CallbackProperty() + + +class TestMultiSliceWidgetHelper(object): + + def test_no_slider_if_flat(self): + x = arange(72).reshape((6, 4, 1, 3)) + data = Data(x=x, label="Flat Cube") + + state = ViewerTestState() + state.reference_data = data + state.x_att = data.pixel_component_ids[0] + state.y_att = data.pixel_component_ids[1] + state.slices = (0,) * data.ndim + + layout = QVBoxLayout() + + helper = MultiSliceWidgetHelper(viewer_state=state, layout=layout) + assert helper._sliders[2] is None + assert isinstance(helper._sliders[3], SliceWidget)