1""" 2===================== 3Matplotlib With Glade 4===================== 5 6""" 7from __future__ import print_function 8import matplotlib 9matplotlib.use('GTK') 10 11from matplotlib.figure import Figure 12from matplotlib.axes import Subplot 13from matplotlib.backends.backend_gtkagg import FigureCanvasGTKAgg as FigureCanvas 14from matplotlib.backends.backend_gtkagg import NavigationToolbar2GTKAgg as NavigationToolbar 15from matplotlib.widgets import SpanSelector 16 17import numpy as np 18import gtk 19import gtk.glade 20 21 22def simple_msg(msg, parent=None, title=None): 23 dialog = gtk.MessageDialog( 24 parent=None, 25 type=gtk.MESSAGE_INFO, 26 buttons=gtk.BUTTONS_OK, 27 message_format=msg) 28 if parent is not None: 29 dialog.set_transient_for(parent) 30 if title is not None: 31 dialog.set_title(title) 32 dialog.show() 33 dialog.run() 34 dialog.destroy() 35 return None 36 37 38class GladeHandlers(object): 39 def on_buttonClickMe_clicked(event): 40 simple_msg('Nothing to say, really', 41 parent=widgets['windowMain'], 42 title='Thanks!') 43 44 45class WidgetsWrapper(object): 46 def __init__(self): 47 self.widgets = gtk.glade.XML('mpl_with_glade.glade') 48 self.widgets.signal_autoconnect(GladeHandlers.__dict__) 49 50 self['windowMain'].connect('destroy', lambda x: gtk.main_quit()) 51 self['windowMain'].move(10, 10) 52 self.figure = Figure(figsize=(8, 6), dpi=72) 53 self.axis = self.figure.add_subplot(111) 54 55 t = np.arange(0.0, 3.0, 0.01) 56 s = np.sin(2*np.pi*t) 57 self.axis.plot(t, s) 58 self.axis.set_xlabel('time (s)') 59 self.axis.set_ylabel('voltage') 60 61 self.canvas = FigureCanvas(self.figure) # a gtk.DrawingArea 62 self.canvas.show() 63 self.canvas.set_size_request(600, 400) 64 self.canvas.set_events( 65 gtk.gdk.BUTTON_PRESS_MASK | 66 gtk.gdk.KEY_PRESS_MASK | 67 gtk.gdk.KEY_RELEASE_MASK 68 ) 69 self.canvas.set_flags(gtk.HAS_FOCUS | gtk.CAN_FOCUS) 70 self.canvas.grab_focus() 71 72 def keypress(widget, event): 73 print('key press') 74 75 def buttonpress(widget, event): 76 print('button press') 77 78 self.canvas.connect('key_press_event', keypress) 79 self.canvas.connect('button_press_event', buttonpress) 80 81 def onselect(xmin, xmax): 82 print(xmin, xmax) 83 84 span = SpanSelector(self.axis, onselect, 'horizontal', useblit=False, 85 rectprops=dict(alpha=0.5, facecolor='red')) 86 87 self['vboxMain'].pack_start(self.canvas, True, True) 88 self['vboxMain'].show() 89 90 # below is optional if you want the navigation toolbar 91 self.navToolbar = NavigationToolbar(self.canvas, self['windowMain']) 92 self.navToolbar.lastDir = '/var/tmp/' 93 self['vboxMain'].pack_start(self.navToolbar) 94 self.navToolbar.show() 95 96 sep = gtk.HSeparator() 97 sep.show() 98 self['vboxMain'].pack_start(sep, True, True) 99 100 self['vboxMain'].reorder_child(self['buttonClickMe'], -1) 101 102 def __getitem__(self, key): 103 return self.widgets.get_widget(key) 104 105widgets = WidgetsWrapper() 106gtk.main() 107