Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 1a7324d

Browse filesBrowse files
committed
Re-write scatterfeatures without magicgui
1 parent 452b848 commit 1a7324d
Copy full SHA for 1a7324d

File tree

1 file changed

+39
-45
lines changed
Filter options

1 file changed

+39
-45
lines changed

‎src/napari_matplotlib/scatter.py

Copy file name to clipboardExpand all lines: src/napari_matplotlib/scatter.py
+39-45Lines changed: 39 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
1-
from typing import Any, List, Optional, Tuple
1+
from typing import Any, Dict, List, Optional, Tuple
22

33
import napari
44
import numpy.typing as npt
5-
from magicgui import magicgui
6-
from magicgui.widgets import ComboBox
7-
from qtpy.QtWidgets import QWidget
5+
from qtpy.QtWidgets import QComboBox, QLabel, QVBoxLayout, QWidget
86

97
from .base import NapariMPLWidget
108
from .util import Interval
@@ -27,9 +25,7 @@ def __init__(
2725
parent: Optional[QWidget] = None,
2826
):
2927
super().__init__(napari_viewer, parent=parent)
30-
3128
self.add_single_axes()
32-
self.update_layers(None)
3329

3430
def clear(self) -> None:
3531
"""
@@ -124,54 +120,51 @@ def __init__(
124120
parent: Optional[QWidget] = None,
125121
):
126122
super().__init__(napari_viewer, parent=parent)
127-
self._key_selection_function_gui = magicgui(
128-
self._set_axis_keys,
129-
x_axis_key={"choices": self._get_valid_axis_keys},
130-
y_axis_key={"choices": self._get_valid_axis_keys},
131-
call_button="plot",
132-
)
133-
_key_selection_widget = self._key_selection_function_gui.native
134-
_key_selection_widget.setParent(self)
135-
self.layout().addWidget(_key_selection_widget)
123+
124+
self.layout().addLayout(QVBoxLayout())
125+
126+
self._selectors: Dict[str, QComboBox] = {}
127+
for dim in ["x", "y"]:
128+
self._selectors[dim] = QComboBox()
129+
# Re-draw when combo boxes are updated
130+
self._selectors[dim].currentTextChanged.connect(self._draw)
131+
132+
self.layout().addWidget(QLabel(f"{dim}-axis:"))
133+
self.layout().addWidget(self._selectors[dim])
134+
135+
self.update_layers(None)
136136

137137
@property
138-
def x_axis_key(self) -> Optional[str]:
138+
def x_axis_key(self) -> str | None:
139139
"""
140140
Key to access x axis data from the FeaturesTable.
141141
"""
142-
return self._x_axis_key
142+
if self._selectors["x"].count() == 0:
143+
return None
144+
else:
145+
return self._selectors["x"].currentText()
143146

144147
@x_axis_key.setter
145-
def x_axis_key(self, key: Optional[str]) -> None:
146-
self._x_axis_key = key
148+
def x_axis_key(self, key: str) -> None:
149+
self._selectors["x"].setCurrentText(key)
147150
self._draw()
148151

149152
@property
150-
def y_axis_key(self) -> Optional[str]:
153+
def y_axis_key(self) -> str | None:
151154
"""
152155
Key to access y axis data from the FeaturesTable.
153156
"""
154-
return self._y_axis_key
157+
if self._selectors["y"].count() == 0:
158+
return None
159+
else:
160+
return self._selectors["y"].currentText()
155161

156162
@y_axis_key.setter
157-
def y_axis_key(self, key: Optional[str]) -> None:
158-
"""
159-
Set the y-axis key.
160-
"""
161-
self._y_axis_key = key
162-
self._draw()
163-
164-
def _set_axis_keys(self, x_axis_key: str, y_axis_key: str) -> None:
165-
"""
166-
Set both axis keys and then redraw the plot.
167-
"""
168-
self._x_axis_key = x_axis_key
169-
self._y_axis_key = y_axis_key
163+
def y_axis_key(self, key: str) -> None:
164+
self._selectors["y"].setCurrentText(key)
170165
self._draw()
171166

172-
def _get_valid_axis_keys(
173-
self, combo_widget: Optional[ComboBox] = None
174-
) -> List[str]:
167+
def _get_valid_axis_keys(self) -> List[str]:
175168
"""
176169
Get the valid axis keys from the layer FeatureTable.
177170
@@ -195,11 +188,12 @@ def _ready_to_scatter(self) -> bool:
195188
return False
196189

197190
feature_table = self.layers[0].features
191+
valid_keys = self._get_valid_axis_keys()
198192
return (
199193
feature_table is not None
200194
and len(feature_table) > 0
201-
and self.x_axis_key is not None
202-
and self.y_axis_key is not None
195+
and self.x_axis_key in valid_keys
196+
and self.y_axis_key in valid_keys
203197
)
204198

205199
def draw(self) -> None:
@@ -240,9 +234,9 @@ def _on_update_layers(self) -> None:
240234
"""
241235
Called when the layer selection changes by ``self.update_layers()``.
242236
"""
243-
if hasattr(self, "_key_selection_widget"):
244-
self._key_selection_function_gui.reset_choices()
245-
246-
# reset the axis keys
247-
self._x_axis_key = None
248-
self._y_axis_key = None
237+
# Clear combobox
238+
for dim in ["x", "y"]:
239+
while self._selectors[dim].count() > 0:
240+
self._selectors[dim].removeItem(0)
241+
# Add keys for newly selected layer
242+
self._selectors[dim].addItems(self._get_valid_axis_keys())

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.