Python: 在鼠标点击时返回坐标信息
我想在Python中显示一张图片,并让用户点击某个特定的像素。然后我想用这个像素的x和y坐标来进行进一步的计算。
到目前为止,我一直在使用事件选择器:
def onpick1(event):
artist = event.artist
if isinstance(artist, AxesImage):
mouseevent = event.mouseevent
x = mouseevent.xdata
y = mouseevent.ydata
print x,y
xaxis = frame.shape[1]
yaxis = frame.shape[0]
fig = plt.figure(figsize=(6,9))
ax = fig.add_subplot(111)
line, = [ax.imshow(frame[::-1,:], cmap='jet', extent=(0,xaxis,0,yaxis), picker=5)]
fig.canvas.mpl_connect('pick_event', onpick1)
plt.show()
现在我真的希望这个 function onpick1()
能返回x和y坐标,这样我就可以在 plt.show()
之后使用它们来进行进一步的计算。
有什么建议吗?
1 个回答
2
在图形用户界面(GUI)编程中,一个很好的经验教训就是要采用面向对象的方式。你现在面临的问题是有一个异步回调,而你想要保存它的值。你可以考虑把所有相关的东西打包在一起,比如:
class MyClickableImage(object):
def __init__(self,frame):
self.x = None
self.y = None
self.frame = frame
self.fig = plt.figure(figsize=(6,9))
self.ax = self.fig.add_subplot(111)
xaxis = self.frame.shape[1]
yaxis = self.frame.shape[0]
self.im = ax.imshow(self.frame[::-1,:],
cmap='jet', extent=(0,xaxis,0,yaxis),
picker=5)
self.fig.canvas.mpl_connect('pick_event', self.onpick1)
plt.show()
# some other associated methods go here...
def onpick1(self,event):
artist = event.artist
if isinstance(artist, AxesImage):
mouseevent = event.mouseevent
self.x = mouseevent.xdata
self.y = mouseevent.ydata
现在,当你点击一个点时,它会设置你类中的 x
和 y
属性。不过,如果你想用 x
和 y
来进行计算,你可以让 onpick1
方法来执行这些计算。