def close_all(cls, event): for fig in cls.instance().all_figures: mpl_close(fig) cls.instance().all_figures = []
def tearDown(self): super().tearDown() mpl_close("all")
def show(self, callbacks=[], close_instead=False, *args, **kwargs): """ Improved show function. You can pass callbacks to call after showing, to have sort of 'non-blocking' behaviour use functools.partial if you want to supply any arguments. """ for fig in self.all_figures: ''' save the figure if it has been ordered ''' filenames = [] if len(self.orders[fig.label]): ''' has this figure been ordered? ''' for order in self.orders[fig.label]: if search('^(.*[^\./])\.\w+$', order.filename): ''' already has an extension ''' filenames.append(order.filename) else: ''' no extension; add all ''' filenames.extend( '%s.%s' % (order.filename, extension) for extension in self.default_extension) ''' order fulfilled; remove it ''' del self.orders[fig.label] elif self.save_all: ''' there is no filename (just a label), so add all extensions to that and treat it like a filename ''' filenames.extend('%s.%s' % (fig.label, extension) for extension in self.default_extension) if filenames: print('saving \'%s\' as %s' % (fig.label, ', '.join('\'%s\'' % filename for filename in filenames))) for filename in filenames: filename = join(self.directory, filename) try: fig.savefig(filename, dpi=fig.save_dpi) except ValueError as err: if 'attempt to index field \'shared\' (a nil value)' in str( err): stderr.write( 'There was a LaTeX error that usually means that the font was not found.\n' ) exit(1) else: raise for fig in self.all_figures: ''' attach the on-close handles to close all other figures too ''' fig.canvas.mpl_connect('close_event', self.close_all) ''' close immediately if close is requested ''' if close_instead: mpl_close(fig) else: ''' show the figure ''' fig.show(*args, **kwargs) ''' any unsaved figures? ''' remaining_orders = sum(self.orders.values(), []) if len(remaining_orders): print('there are %d unsaved orders! figures were not found for:' % len(remaining_orders)) for order in remaining_orders: print('\'%s\' (\'%s\')' % (order.label, order.filename)) ''' show all figures to prevent error ''' mpl_show(*args, **kwargs)