绑定事件以单击 tkinter 中的绘图 canvas
Bind event to click on plot in tkinter canvas
我可以像这样将点击事件绑定到绘图(即打印被点击的坐标):
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 中的图做同样的事情,如下所示:
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 上的像素坐标而不是绘图中的坐标。
不使用plt.connect
,而是使用
canvas.mpl_connect('button_press_event', plotClick)
使用它,您可以使用 event.xdata
和 event.ydata
访问绘图中的坐标,但您仍然可以使用 [=14] 访问 canvas 上的(像素)坐标=] 和 event.y
.
我可以像这样将点击事件绑定到绘图(即打印被点击的坐标):
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 中的图做同样的事情,如下所示:
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()
我需要做什么才能在此处完成相同的行为?
注意:我知道可以使用
将事件直接绑定到 canvascanvas.get_tk_widget().bind('<Button-1>', plotClick)
和
def plotClick(event):
print('Clicked at x=%f, y=%f' %(event.x, event.y))
然而,这使用 canvas 上的像素坐标而不是绘图中的坐标。
不使用plt.connect
,而是使用
canvas.mpl_connect('button_press_event', plotClick)
使用它,您可以使用 event.xdata
和 event.ydata
访问绘图中的坐标,但您仍然可以使用 [=14] 访问 canvas 上的(像素)坐标=] 和 event.y
.