簡體   English   中英

綁定事件點擊tkinter canvas中的plot

[英]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.xdataevent.ydata訪問 plot 中的坐標,但您仍然可以使用event.xevent.y訪問 canvas 中的(像素)坐標。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM