@@ -42,7 +42,6 @@ def __init__(
42
42
43
43
# Create widgets for setting bin parameters
44
44
bins_start = QDoubleSpinBox ()
45
- bins_start .setObjectName ("bins start" )
46
45
bins_start .setStepType (QAbstractSpinBox .AdaptiveDecimalStepType )
47
46
bins_start .setRange (- 1e10 , 1e10 )
48
47
bins_start .setValue (0 )
@@ -51,7 +50,6 @@ def __init__(
51
50
bins_start .setDecimals (2 )
52
51
53
52
bins_stop = QDoubleSpinBox ()
54
- bins_stop .setObjectName ("bins stop" )
55
53
bins_stop .setStepType (QAbstractSpinBox .AdaptiveDecimalStepType )
56
54
bins_stop .setRange (- 1e10 , 1e10 )
57
55
bins_stop .setValue (100 )
@@ -60,7 +58,6 @@ def __init__(
60
58
bins_stop .setDecimals (2 )
61
59
62
60
bins_num = QSpinBox ()
63
- bins_num .setObjectName ("bins num" )
64
61
bins_num .setRange (1 , 100_000 )
65
62
bins_num .setValue (101 )
66
63
bins_num .setWrapping (False )
@@ -84,6 +81,13 @@ def __init__(
84
81
bins_stop .valueChanged .connect (self ._draw )
85
82
bins_num .valueChanged .connect (self ._draw )
86
83
84
+ # Store widgets for later usage
85
+ self ._bin_widgets = {
86
+ "start" : bins_start ,
87
+ "stop" : bins_stop ,
88
+ "num" : bins_num ,
89
+ }
90
+
87
91
self ._update_layers (None )
88
92
self .viewer .events .theme .connect (self ._on_napari_theme_changed )
89
93
@@ -108,12 +112,17 @@ def on_update_layers(self) -> None:
108
112
is_unsigned = layer_data .dtype .kind == "u"
109
113
minimum_value = 0 if is_unsigned else - 1e10
110
114
111
- bins_start = self .findChild (QDoubleSpinBox , name = "bins start" )
112
- bins_stop = self .findChild (QDoubleSpinBox , name = "bins stop" )
113
- bins_start .setDecimals (n_decimals )
114
- bins_stop .setDecimals (n_decimals )
115
- bins_start .setMinimum (minimum_value )
116
- bins_stop .setMinimum (minimum_value )
115
+ # Disable callbacks whilst widget values might change
116
+ for widget in self ._bin_widgets .values ():
117
+ widget .blockSignals (True )
118
+
119
+ self ._bin_widgets ["start" ].setDecimals (n_decimals )
120
+ self ._bin_widgets ["stop" ].setDecimals (n_decimals )
121
+ self ._bin_widgets ["start" ].setMinimum (minimum_value )
122
+ self ._bin_widgets ["stop" ].setMinimum (minimum_value )
123
+
124
+ for widget in self ._bin_widgets .values ():
125
+ widget .blockSignals (False )
117
126
118
127
def _update_contrast_lims (self ) -> None :
119
128
for lim , line in zip (
@@ -138,39 +147,46 @@ def autoset_widget_bins(self, data: npt.NDArray[Any]) -> None:
138
147
else :
139
148
bins = np .linspace (np .min (data ), np .max (data ), 100 )
140
149
150
+ # Disable callbacks whilst setting widget values
151
+ for widget in self ._bin_widgets .values ():
152
+ widget .blockSignals (True )
153
+
141
154
self .bins_start = bins [0 ]
142
155
self .bins_stop = bins [- 1 ]
143
156
self .bins_num = bins .size
144
157
158
+ for widget in self ._bin_widgets .values ():
159
+ widget .blockSignals (False )
160
+
145
161
@property
146
162
def bins_start (self ) -> float :
147
163
"""Minimum bin edge"""
148
- return self .findChild ( QDoubleSpinBox , name = "bins start") .value ()
164
+ return self ._bin_widgets [ " start"] .value ()
149
165
150
166
@bins_start .setter
151
167
def bins_start (self , start : Union [int , float ]) -> None :
152
168
"""Set the minimum bin edge"""
153
- self .findChild ( QDoubleSpinBox , name = "bins start") .setValue (start )
169
+ self ._bin_widgets [ " start"] .setValue (start )
154
170
155
171
@property
156
172
def bins_stop (self ) -> float :
157
173
"""Maximum bin edge"""
158
- return self .findChild ( QDoubleSpinBox , name = "bins stop") .value ()
174
+ return self ._bin_widgets [ " stop"] .value ()
159
175
160
176
@bins_stop .setter
161
177
def bins_stop (self , stop : Union [int , float ]) -> None :
162
178
"""Set the maximum bin edge"""
163
- self .findChild ( QDoubleSpinBox , name = "bins stop") .setValue (stop )
179
+ self ._bin_widgets [ " stop"] .setValue (stop )
164
180
165
181
@property
166
182
def bins_num (self ) -> int :
167
183
"""Number of bins to use"""
168
- return self .findChild ( QSpinBox , name = "bins num") .value ()
184
+ return self ._bin_widgets [ " num"] .value ()
169
185
170
186
@bins_num .setter
171
187
def bins_num (self , num : int ) -> None :
172
188
"""Set the number of bins to use"""
173
- self .findChild ( QSpinBox , name = "bins num") .setValue (num )
189
+ self ._bin_widgets [ " num"] .setValue (num )
174
190
175
191
def _get_layer_data (self , layer : napari .layers .Layer ) -> npt .NDArray [Any ]:
176
192
"""Get the data associated with a given layer"""
0 commit comments