TKinter mouse button_press_event неверные xdata и ydata после использования matplotlib set_data - PullRequest
0 голосов
/ 15 февраля 2019

Я создаю приложение 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 (это должен быть квадрат).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...