2014-04-22 4 views
3

이미지를 파이썬으로 표시하고 사용자가 특정 픽셀을 클릭 할 수있게하려고합니다. 그런 다음 x 및 y 좌표를 사용하여 추후 계산을 수행하려고합니다.Python : 마우스 클릭시 좌표 정보 반환

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()return x and y에 같은 그래서 더 계산을 수행 할 plt.show() 후 사용할 수 있습니다 것입니다 :

지금까지, 나는 이벤트 선택기를 사용했습니다.

제안 사항?

+0

그냥 return (x, y) –

답변

2

GUI 프로그래밍의 좋은 교훈은 객체 지향입니다. 귀하의 문제는 지금 당신이 비동기 콜백을 가지고 그 값을 유지하고자하는 것입니다. 당신이 지점을 클릭하면 지금, 그것은 당신의 클래스의 xy 속성을 설정합니다

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 

: 당신처럼 함께 최대 모든 것을 포장 고려해야한다. 그러나 xy을 사용하여 계산을 수행하려면 onpick1 메서드에서 계산을 수행하면됩니다.