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() в return x and y так что я могу использовать его после plt.show() выполнить дальнейшие расчеты.

Какие-либо предложения?

1 ответ

Хороший урок с программированием 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 Метод выполнения этих расчетов.

Другие вопросы по тегам