source: trunk/python/asaplotgui.py

Last change on this file was 2516, checked in by Malte Marquarding, 12 years ago

Another occurence of teh atexit gcf failure

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.3 KB
RevLine 
[707]1"""
2ASAP plotting class based on matplotlib.
3"""
4
5from asap.asaplotbase import *
6import Tkinter as Tk
[1422]7import matplotlib
[707]8from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, \
9        FigureManagerTkAgg
10# Force use of the newfangled toolbar.
11matplotlib.rcParams['toolbar'] = 'toolbar2'
[2416]12from matplotlib import _pylab_helpers
[2451]13from asap.logging import asaplog, asaplog_post_dec
[707]14
15class asaplotgui(asaplotbase):
16    """
17    ASAP plotting class based on matplotlib.
18    """
19
[1563]20    def __init__(self, rows=1, cols=0, title='', size=None, buffering=False):
[1826]21        """
22        Create a new instance of the ASAPlot plotting class.
[707]23
[1826]24        If rows < 1 then a separate call to set_panels() is required to define
25        the panel layout; refer to the doctext for set_panels().
26        """
[707]27        v = vars()
28        del v['self']
[1153]29
[707]30        asaplotbase.__init__(self, **v)
[2451]31        #matplotlib.rcParams["interactive"] = True
32
[2469]33        _pylab_helpers.Gcf.destroy(0)
[707]34        self.window = Tk.Tk()
[2416]35        self.window.protocol("WM_DELETE_WINDOW", self.quit)
[707]36        self.canvas = FigureCanvasTkAgg(self.figure, master=self.window)
37        self.canvas.get_tk_widget().pack(side=Tk.TOP, fill=Tk.BOTH, expand=1)
38        # Simply instantiating this is enough to get a working toolbar.
[2416]39        self.figmgr = FigureManagerTkAgg(self.canvas, 0, self.window)
[2516]40        self.figmgr._cidgcf = None
[2416]41        # Register this plot to matplotlib without activating it
42        #_pylab_helpers.Gcf.set_active(self.figmgr)
43        _pylab_helpers.Gcf.figs[self.figmgr.num] = self.figmgr
[2170]44        self._set_window_title('ASAP Plotter - Tk')
[2451]45        self.canvas.show()
[707]46
47
48    def map(self):
[1826]49        """
50        Reveal the ASAPlot graphics window and bring it to the top of the
51        window stack.
52        """
[2451]53        if self.is_dead:
54            raise RuntimeError( "No plotter to show. Not yet plotted or plotter is closed." )
[1826]55        self.window.wm_deiconify()
56        self.window.lift()
[707]57
58    def quit(self):
[1826]59        """
60        Destroy the ASAPlot graphics window.
61        """
[2149]62        self.is_dead = True
[2451]63        if not self.figmgr:
64            return
[2416]65        #self.window.destroy()
66        _pylab_helpers.Gcf.destroy(self.figmgr.num)
[2451]67        del self.window, self.canvas, self.figmgr
[2416]68        self.window = None
69        self.canvas = None
[2451]70        self.figmgr = None
[707]71
[1153]72    def show(self, hardrefresh=True):
[1826]73        """
74        Show graphics dependent on the current buffering state.
75        """
[2451]76        if self.is_dead:
77            raise RuntimeError( "No plotter to show (not yet plotted or closed)." )
[1826]78        if not self.buffering:
[1153]79            if hardrefresh:
80                asaplotbase.show(self)
[1826]81            self.window.wm_deiconify()
82            self.canvas.show()
[707]83
84    def terminate(self):
[1826]85        """
86        Clear the figure.
87        """
[2451]88        if not self.window:
89            asaplog.push( "No plotter window to terminate." )
90            asaplog.post( "WARN" )
91            return
[1826]92        self.window.destroy()
[707]93
94    def unmap(self):
[1826]95        """
96        Hide the ASAPlot graphics window.
97        """
[2451]98        if not self.window:
99            asaplog.push( "No plotter window to unmap." )
100            asaplog.post( "WARN" )
101            return
[1826]102        self.window.wm_withdraw()
[2170]103
104    def _set_window_title(self,title):
105        # Set title to main window title bar
106        self.window.wm_title(title)
Note: See TracBrowser for help on using the repository browser.