Dear Group,
What I need to do is to
- produce a plot (DONE)
- fix it so that mouse clicks in the canvas append the x coordinate of the click to a list (DONE)
- add a couple of buttons to the GUI, to reset the list and to kill the window (DONE)
So I’m pretty successful so far. The only problem is that the coordinates are in canvas coordinates, not plot coordinates. Now, rather embarrassingly, I can’t figure out how to get this right. It seems to be the case that all the examples are in plot coordinates. As of course is the readout in the GUI itself. Is there a simple way to fix this or do I have convert it to some other backend? Or use something else instead of FigureCanvasGTK? This, to me, made the most sense to me at the time of writing, although I must confess I’m still pretty new to this.
I paste some stripped down code below.
Thanks in advance,
Matthew
#!/usr/bin/env python
import sys, os, string
import scipy as S
pygtk.require(‘2.0’)
import gtk
#MPL.use(‘GTKAgg’)
import pylab as P
from matplotlib.backends.backend_gtk import FigureCanvasGTK as FigureCanvas
from matplotlib.backends.backend_gtk import NavigationToolbar2GTK as NavigationToolbar
class Stuff:
def reset(self, widget, data=None):
self.ranges= S.array([])
print self.ranges
def delete_event(self, widget, event, data=None):
print "delete event occurred"
return False
def destroy(self, widget, data=None):
gtk.main_quit()
def clickCanvas(self, widget, event):
if event.button==1:
self.ranges = S.append(self.ranges , event.x)
print self.ranges
def ZoneSetup(self):
x=S.rand(10)
y=S.rand(10)
win = gtk.Window()
win.connect("delete_event", self.delete_event)
win.connect("destroy", self.destroy)
win.set_default_size(600,450)
vbox = gtk.VBox()
hbox = gtk.HBox()
win.add(vbox)
fig = P.Figure(figsize=(5,4), dpi=100)
ax = fig.add_subplot(111)
ax.plot(x, y, c='red', ls='-')
canvas = FigureCanvas(fig)
vbox.pack_start(canvas)
toolbar = NavigationToolbar(canvas, win)
hbox.pack_start(toolbar)
bReset = gtk.Button("Reset")
bQuit = gtk.Button("Quit")
hbox.pack_start(bReset, False, False, 0)
hbox.pack_start(bQuit, False, False, 0)
vbox.pack_start(hbox, False, False)
bReset.connect ("clicked", self.reset)
bQuit.connect_object("clicked", gtk.Widget.destroy, win)
canvas.connect("button_press_event", self.clickCanvas)
win.show_all()
gtk.main()
def __init__(self):
self.ranges= S.array([])
a=Stuff()
a.ZoneSetup()
print a.ranges