[英]Bind event to click on plot in tkinter canvas
我可以將點擊事件綁定到 plot(即打印被點擊的坐標),如下所示:
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 window 內的 canvas 中的 plot 做同樣的事情,如下所示:
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
canvas.get_tk_widget().bind('<Button-1>', plotClick)
和
def plotClick(event):
print('Clicked at x=%f, y=%f' %(event.x, event.y))
但是,它使用 canvas 上的像素坐標,而不是 plot 中的坐標。
而不是使用plt.connect
,使用
canvas.mpl_connect('button_press_event', plotClick)
使用它,您可以使用event.xdata
和event.ydata
訪問 plot 中的坐標,但您仍然可以使用event.x
和event.y
訪問 canvas 中的(像素)坐標。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.