2013-03-30 32 views
4

因此,我正在尝试编写一个检测鼠标在图像上单击并保存x,y位置的程序。我一直在使用matplotlib和我有一个基本的情节的工作,但是当我尝试使用的图像使用相同的代码,我得到以下错误:用matplotlib检测图像中的鼠标事件

cid = implot.canvas.mpl_connect('button_press_event', onclick) 'AxesImage' object has no attribute 'canvas'

这是我的代码:

import matplotlib.pyplot as plt 

im = plt.imread('image.PNG') 
implot = plt.imshow(im) 

def onclick(event): 
    if event.xdata != None and event.ydata != None: 
     print(event.xdata, event.ydata) 
cid = implot.canvas.mpl_connect('button_press_event', onclick) 

plt.show() 

让我知道如果你有任何想法如何解决这个问题或更好的方式来实现我的目标。非常感谢!

回答

6

问题是implotArtist的子类,它绘制到canvas实例,但不包含(容易到达)对画布的引用。您正在查找的属性是figure类的属性。

你想做的事:

ax = plt.gca() 
fig = plt.gcf() 
implot = ax.imshow(im) 

def onclick(event): 
    if event.xdata != None and event.ydata != None: 
     print(event.xdata, event.ydata) 
cid = fig.canvas.mpl_connect('button_press_event', onclick) 

plt.show() 
+0

是的!我无法弄清楚为什么这些地块有画布,并且没有。太棒了。非常感谢。 – user2227523

+1

@ user2227523如果这解决了您的问题,您能否接受它(左边的大灰色复选标记)?它给我们两个代表,并标志着未来用户解决的问题。 – tacaswell

+0

对!我有点新... – user2227523

3

只需implot.canvasimplot.figure.canvas取代:

cid = implot.figure.canvas.mpl_connect('button_press_event', onclick)