You need to enable JavaScript to run this app. 如何为Tkinter GUI内嵌Matplotlib图添加悬浮坐标显示光标
优惠活动
大模型
产品
解决方案
定价
更多

如何为Tkinter GUI内嵌Matplotlib图添加悬浮坐标显示光标

解决方法

导致光标不生效的核心原因是Cursor实例被Python垃圾回收机制自动清理,你可以按如下步骤修正:

  • 首先确认你导入的是matplotlib官方的光标组件:from matplotlib.widgets import Cursor
  • 不要把Cursor定义为局部变量,需要用全局变量或者类实例属性持有它,保证它的生命周期和绘图窗口一致
  • plot本身就是add_subplot()返回的Axes实例,直接作为ax参数传入即可,不需要额外取.axes属性

修正后可运行的完整代码示例:

from matplotlib.widgets import Cursor
import tkinter as tk
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure

root = tk.Tk()
x = [1,2,3,4,5]
y = [2,4,1,5,3]    
Date = "数据日期"
figure = Figure(figsize=(5, 4), dpi=100) 
plot = figure.add_subplot(1, 1, 1)
figure.suptitle(Date, fontsize=12)
plot.plot(x, y, color="blue")
# 持有Cursor实例,若写在类中则赋值给self.cursor即可
global cursor
cursor = Cursor(plot, horizOn=True, vertOn=False, color="green", linewidth=2.0)

# 若需要额外显示坐标数值,可添加以下绑定逻辑
coord_text = figure.text(0.15, 0.92, '', fontsize=10)
def on_mouse_move(event):
    if event.inaxes == plot:
        coord_text.set_text(f'x={event.xdata:.2f}, y={event.ydata:.2f}')
    else:
        coord_text.set_text('')
    canvas.draw_idle()

canvas = FigureCanvasTkAgg(figure, root)
canvas.mpl_connect('motion_notify_event', on_mouse_move)
canvas.get_tk_widget().grid(column=0, row=3,columnspan=4,pady = 4, padx=4)

root.mainloop()

内容的提问来源于stack exchange,提问作者Joe_bart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 17:15:07