source: trunk/python/asaplotgui_qt4.py@ 2445

Last change on this file since 2445 was 2416, checked in by Kana Sugimoto, 13 years ago

New Development: No

JIRA Issue: Yes (CAS-3749)

Ready for Test: Yes

Interface Changes: No

What Interface Changed:

Test Programs: an interactive test

  1. load casapy (or standalone asap)
  2. matplotlib.pyplot.show() ---> 2 plotters (ASAP plotter and matplotlib plotter) are displayed and casapy prompt is paused.
  3. close all plotter windows ---> casapy prompt should be back

Put in Release Notes: No

Module(s): sdplot, asap.plotter

Description:

Fixed a bug in asapplotter with Tk backend which caused scripts and python shells
freeze after the initial invocation of matplotlib.pyplot.show() (known as pl.show() on CASA).
plus minor fixes which handle backend dependencies.

File size: 2.8 KB
Line 
1"""
2ASAP plotting class based on matplotlib.
3"""
4
5from asap.asaplotbase import *
6import PyQt4 as qt
7from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg, \
8 FigureManagerQTAgg
9from matplotlib import _pylab_helpers
10# Force use of the newfangled toolbar.
11import matplotlib
12#matplotlib.use("Qt4Agg")
13matplotlib.rcParams['toolbar'] = 'toolbar2'
14
15class asaplotgui(asaplotbase):
16 """
17 ASAP plotting class based on matplotlib.
18 """
19
20 def __init__(self, rows=1, cols=0, title='', size=None, buffering=False):
21 """
22 Create a new instance of the ASAPlot plotting class.
23
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 """
27 v = vars()
28 del v['self']
29
30 asaplotbase.__init__(self, **v)
31
32 self.canvas = FigureCanvasQTAgg(self.figure)
33 # Simply instantiating this is enough to get a working toolbar.
34 self.figmgr = FigureManagerQTAgg(self.canvas, 0)
35 self.window = self.figmgr.window
36 self._set_window_title('ASAP Plotter - Qt4')
37 # Register this plot to matplotlib without activating it
38 #_pylab_helpers.Gcf.set_active(self.figmgr)
39 _pylab_helpers.Gcf.figs[self.figmgr.num] = self.figmgr
40
41 #############
42 ### DO WE HAVE TO DO SOMETHING FOR WINDOW CLOSE CALL?
43 #############
44 def dest_callback():
45 try:
46 self.is_dead = True
47 except NameError:
48 pass
49
50 qt.QtCore.QObject.connect(self.window, qt.QtCore.SIGNAL('destroyed()'),dest_callback)
51
52 self.events = {'button_press':None,
53 'button_release':None,
54 'motion_notify':None}
55
56 matplotlib.rcParams["interactive"] = True
57 self.buffering = buffering
58
59 self.unmap()
60 #self.canvas.show()
61
62 def map(self):
63 """
64 Reveal the ASAPlot graphics window and bring it to the top of the
65 window stack.
66 """
67 self.window.activateWindow()
68 #To raise this window to the top of the stacking order
69 self.window.raise_()
70 self.window.show()
71
72 def quit(self):
73 """
74 Destroy the ASAPlot graphics window.
75 """
76 self.is_dead = True
77 try: self.window.close()
78 except RuntimeError: pass # the window may already be closed by user
79
80 def show(self, hardrefresh=True):
81 """
82 Show graphics dependent on the current buffering state.
83 """
84 if not self.buffering:
85 if hardrefresh:
86 asaplotbase.show(self)
87 self.window.activateWindow()
88 self.canvas.draw()
89 #self.canvas.show()
90 self.window.show()
91
92 def terminate(self):
93 """
94 Clear the figure.
95 """
96 self.window.close()
97
98 def unmap(self):
99 """
100 Hide the ASAPlot graphics window.
101 """
102 self.window.hide()
103
104 def _set_window_title(self,title):
105 # Set title to main window title bar
106 self.window.setWindowTitle(title)
Note: See TracBrowser for help on using the repository browser.