Exemple #1
0
 def close_all(cls, event):
     for fig in cls.instance().all_figures:
         mpl_close(fig)
     cls.instance().all_figures = []
Exemple #2
0
 def tearDown(self):
     super().tearDown()
     mpl_close("all")
Exemple #3
0
    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)