Hello darkside,
the below example seems to do the job.
The problem with x, y = event.xdata, event.ydata could be due to a
local-global-variable issue (solution: define x, y with keyword global,
i.e. "global x, y" in your function 'click' [ -> they become global
variables] to change their values in this function and use them in the main
program, too).
best regards,
Matthias
>----------------------------------------------------------------------------------------------------------
import pylab
from matplotlib.widgets import Cursor
datax=[]
datay =[]
def click(event):
if event.button == 1:
if event.inaxes:
print 'data coords: ', event.xdata, event.ydata
datax.append(event.xdata)
datay.append(event.ydata)
# disconnect the connection with id 'cid' after the first run of
# this part
pylab.disconnect(cid)
if event.button == 3:
# only possible before the first run of the upper
# part ' if event.button == 1'
pylab.close()
return datax,datay
fig = pylab.figure(figsize=(8,6))
ax = fig.add_subplot(111)
ax.plot(pylab.arange(10))
cursor = Cursor(ax, useblit=False, color='red', linewidth=2)
cursor.horizOn = False
# connection with id 'cid'
cid = pylab.connect('button_press_event', click)
pylab.show()
print 'los arrays de data son: ', datax,datay
>-----------------------------------------------------------------------------------------------------
On Sunday 10 June 2007 04:54, darkside wrote:
> Hello,
> I've tried your idea, but it doesn't work.
> If I put:
> ----------------------
> datax=[]
> datay =[]
>
>
> def click(event):
>
> if event.button == 1:
> if event.inaxes:
> print 'data coords: ', event.xdata, event.ydata
> datax.append(event.xdata)
> datay.append(event.ydata)
> pylab.disconnect(click)
>
> if event.button == 3:
> pylab.close()
>
> return datax,datay
>
> fig = pylab.figure(figsize=(8,6))
> ax = fig.add_subplot(111)
> ax.plot(pylab.arange(10))
> cursor = Cursor(ax, useblit=False, color='red', linewidth=2)
> cursor.horizOn = False
>
> pylab.connect('button_press_event', click)
>
> pylab.show()
> print 'los arrays de data son: ', datax,datay
> ------------------------
> It returns the arrays, but it doesn't stop after one click, I have to press
> number 3 to exit.
>
> I tried to change to x, y instead of datax, datay in the following way:
>
> ------------------------
> x, y = 0,0
>
> x, y = event.x, event.y
> -----------------------------
>
> But in this case I get an error: "name 'x' is not defined"
> And I don't know why, because I only change the lines refering to datax,
> datay. It seems that only works with lists, but I don't know if this is the
> problem exactly.
>
> With the command close, I can close the figure window pressing right mouse
> button. It works (at least something works).
>
> Thank you for your help.
>
> 2007/6/4, Matthias Michler <[EMAIL PROTECTED]>:
> > Hello darkside,
> >
> > maybe the following little examples helps you with disconnecting:
> > >------------------------------------------------------------------------
> > >--------
> >
> > from pylab import *
> >
> > def event_response(event):
> > print event.name
> > disconnect(cid)
> >
> > subplot(111)
> > cid = connect('button_press_event', event_response)
> >
> > show()
> >
> > >------------------------------------------------------------------------
> > >-----
> >
> > concerning opening of figures:
> > I think it is not possible to open a figure after the show()
> > ( I asked some time ago with subject "open / close or set active figures
> > during mainloop", but unfortunately without response).
> >
> > Maybe it would be sufficient for you to clean the figure or the axes
> > (pylab.clf/cla), resetting labels and use the same connected event
> > several times.
> >
> > best regards,
> > Matthias
> >
> > On Monday 04 June 2007 04:28, darkside wrote:
> > > I'm trying to use matplotlib to get an x point on some figures by
> >
> > mouse
> >
> > > clicking.
> > > To do this I try the next example:
> > > -------------------------
> > > datax=[]
> > > datay =[]
> > > def click(event):
> > > x, y = event.x, event.y
> > > if event.button == 1:
> > > if event.inaxes:
> > > print 'data coords: ', event.xdata, event.ydata
> > > datax.append(event.xdata)
> > > datay.append(event.ydata)
> > > if event.button == 3:
> > > pylab.close()
> > > return datax,datay
> > > fig = pylab.figure(figsize=(8,6))
> > > ax = fig.add_subplot(111)
> > >
> > > - Ignored:
> > > ax.plot(pylab.arange(10))
> > > cursor = Cursor(ax, useblit=False, color='red', linewidth=2)
> > > cursor.horizOn = False
> > >
> > > pylab.connect('button_press_event', click)
> > >
> > > pylab.show()
> > > pylab.disconnect(click)
> > > print 'los arrays de data son: ', datax,datay
> > > ------------------------------------------------------
> > >
> > > My problem is tha I want to only be able to click each figure once,
> >
> > then
> >
> > > lock the
> > > figure (making it unclickable), close it and open another one. But
> >
> > I'm
> >
> > > not
> > > able to
> > > implement this.
> > > Anyone have any suggestions?.
> >
> > -------------------------------------------------------------------------
> > This SF.net email is sponsored by DB2 Express
> > Download DB2 Express C - the FREE version of DB2 express and take
> > control of your XML. No limits. Just data. Click to get it now.
> > http://sourceforge.net/powerbar/db2/
> > _______________________________________________
> > Matplotlib-users mailing list
> > [email protected]
> > https://lists.sourceforge.net/lists/listinfo/matplotlib-users
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Matplotlib-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-users