File tree Expand file tree Collapse file tree 2 files changed +43
-10
lines changed Expand file tree Collapse file tree 2 files changed +43
-10
lines changed Original file line number Diff line number Diff line change @@ -232,20 +232,27 @@ def close_all(self):
232
232
passing it to `show`.
233
233
234
234
"""
235
- for fig in self .figures :
236
- if fig .canvas .manager is not None :
237
- fig .canvas .manager .destroy ()
235
+ for fig in list (self .figures ):
236
+ self .close (fig )
237
+
238
+ def close (self , val ):
239
+ if val == "all" :
240
+ return self .close_all ()
241
+ # or do we want to close _all_ of the figures with a given label / number?
242
+ if isinstance (val , str ):
243
+ fig = self .by_label [val ]
244
+ elif isinstance (val , int ):
245
+ fig = self .by_number [val ]
246
+ else :
247
+ fig = val
248
+ if fig .canvas .manager is not None :
249
+ fig .canvas .manager .destroy ()
238
250
# disconnect figure from canvas
239
251
fig .canvas .figure = None
240
252
# disconnect canvas from figure
241
253
_FigureCanvasBase (figure = fig )
242
- self .figures .clear ()
243
-
244
- def close (self , val ):
245
- if val != "all" :
246
- # TODO close figures 1 at a time
247
- raise RuntimeError ("can only close them all" )
248
- self .close_all ()
254
+ if fig in self .figures :
255
+ self .figures .remove (fig )
249
256
250
257
251
258
class FigureContext (FigureRegistry ):
Original file line number Diff line number Diff line change @@ -140,3 +140,29 @@ def test_change_labels():
140
140
for j , f in enumerate (fr .by_label .values ()):
141
141
f .set_label (f"aardvark { j } " )
142
142
assert list (fr .by_label ) == [f"aardvark { j } " for j in range (5 )]
143
+
144
+
145
+ def test_close_one_at_a_time ():
146
+ fr = mg .FigureRegistry (block = False )
147
+ fig1 = fr .figure (label = 'a' )
148
+ fig2 = fr .figure (label = 'b' )
149
+ fig3 = fr .figure (label = 'c' )
150
+ fr .figure (label = 'd' )
151
+ assert len (fr .figures ) == 4
152
+
153
+ fr .close (fig1 )
154
+ assert len (fr .figures ) == 3
155
+ assert fig1 not in fr .figures
156
+
157
+ fr .close (fig2 .get_label ())
158
+ assert len (fr .figures ) == 2
159
+ assert fig2 not in fr .figures
160
+
161
+ fr .show ()
162
+
163
+ fr .close (fig3 .canvas .manager .num )
164
+ assert len (fr .figures ) == 1
165
+ assert fig3 not in fr .figures
166
+
167
+ fr .close ('all' )
168
+ assert len (fr .figures ) == 0
You can’t perform that action at this time.
0 commit comments