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
Метод выполнения этих расчетов.