Я создаю приложение Python TKinter, в котором я динамически обновляю некоторые встроенные изображения Matplotlib.Размеры этих изображений могут меняться во время выполнения.Я хочу иметь возможность определять положение щелчка мыши в этих изображениях Matplotlib.К сожалению, переменные event.xdata и event.ydata всегда находятся в начальном диапазоне и не обновляются до измененного набора данных с помощью set_data.Возможно, я должен уведомить холст или событие щелчка мыши, что размер отображаемого массива изменился, но как мне это сделать?
import numpy as np
import tkinter as tk
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
class MainApplication(tk.Frame):
def __init__(self, parent, *args, **kwargs):
tk.Frame.__init__(self, parent, *args, **kwargs)
self.parent = parent
# Initialize normally
fig = Figure(figsize=(10, 4))
ax = fig.add_subplot(111)
ax.axis('off')
im = ax.imshow(np.zeros((480, 640), dtype=np.uint8), vmin=0, vmax=255)
canvas = FigureCanvasTkAgg(fig, master=self.parent)
canvas.draw()
canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)
canvas.mpl_connect("button_press_event", self.on_mouse_presegmented_click)
# This part may be in a callback in order top update the content of the
im.set_data(np.ones((200, 200), dtype=np.uint8) * 255)
canvas.draw()
def on_mouse_presegmented_click(self, event):
# This is always in the range (480, 640), even though it should later be (200, 200)
print(int(event.xdata), int(event.ydata))
if __name__ == "__main__":
root = tk.Tk()
MainApplication(root).pack(side="top", fill="both", expand=True)
root.mainloop()
Я ожидаю, что в файлах event.xdata и event.ydataдиапазон (200, 200) после использования set_data вместо (480, 640).Кроме того, форма холста, похоже, не обновляется после использования set_data (это должен быть квадрат).