Я могу привязать событие щелчка к графику (т. е. распечатать координаты, по которым был сделан щелчок) следующим образом:
from matplotlib.backend_bases import MouseButton
import matplotlib.pyplot as plt
x = [1, 2, 3, 4]
y = [2, 3, 1, 4]
fig, ax = plt.subplots()
ax.plot(x, y)
def plotClick(event):
if event.button == MouseButton.LEFT:
print('Clicked at x=%f, y=%f' %(event.xdata, event.ydata))
plt.connect('button_press_event', plotClick)
plt.show()
Я хотел бы сделать то же самое с сюжетом, который содержится на холсте внутри окна tkinter, например:
from matplotlib.backend_bases import MouseButton
import tkinter as tk
from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
window = tk.Tk()
fig = Figure(figsize=(5, 3))
ax = fig.add_subplot(111)
x = [1, 2, 3, 4]
y = [2, 3, 1, 4]
line, = ax.plot(x, y)
canvas = FigureCanvasTkAgg(fig)
canvas.draw()
canvas.get_tk_widget().pack()
def plotClick(event):
if event.button == MouseButton.LEFT:
print('Clicked at x=%f, y=%f' %(event.xdata, event.ydata))
window.mainloop()
Что мне нужно сделать, чтобы добиться такого же поведения здесь?
Примечание. Я знаю, что можно напрямую привязывать события к холсту, используя
canvas.get_tk_widget().bind('<Button-1>', plotClick)
с
def plotClick(event):
print('Clicked at x=%f, y=%f' %(event.x, event.y))
Однако при этом используются координаты пикселей на холсте вместо координат на графике.
Вместо использования plt.connect
используйте
canvas.mpl_connect('button_press_event', plotClick)
Используя это, вы можете получить доступ к координатам на графике с помощью event.xdata
и event.ydata
, но вы также можете получить доступ к (пиксельным) координатам на холсте с помощью event.x
и event.y
.