You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

实现随光标移动动态更新的Tkinter tooltip显示Matplotlib绘图X值

实现随光标移动的动态Tooltip(显示Matplotlib绘图X值)

核心方案

通过Tkinter的Toplevel组件创建无框浮动tooltip,绑定Matplotlib画布的鼠标事件,实时转换坐标并更新tooltip的内容与位置,实现跟随光标的动态显示效果。

完整代码

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

root = tk.Tk()
root.title("动态Tooltip演示")

Fs = 8000
f = 5
sample = 8000
x = np.arange(sample)
y = np.sin(2 * np.pi * f * x / Fs)

figure = Figure(figsize=(5, 4), dpi=100)
plot = figure.add_subplot(1, 1, 1)
plot.plot(x, y, color="blue")

canvas = FigureCanvasTkAgg(figure, root)
canvas_widget = canvas.get_tk_widget()
canvas_widget.grid(column=0, row=3, columnspan=4, pady=4, padx=4)

# 创建浮动tooltip窗口
tooltip = tk.Toplevel(root)
tooltip.wm_overrideredirect(True)  # 隐藏窗口边框
tooltip.withdraw()  # 初始状态隐藏
tooltip_label = tk.Label(tooltip, text="X值: 0", bg="lightyellow", padx=2, pady=1, relief=tk.SOLID)
tooltip_label.pack()

# 鼠标移动事件处理
def on_mouse_move(event):
    if event.inaxes == plot:
        # 将画布像素坐标转换为绘图X轴实际数据
        x_val = int(canvas.canvasx(event.x))
        tooltip_label.config(text=f"X值: {x_val}")
        # 设置tooltip位置,偏移光标避免遮挡
        tooltip.geometry(f"+{root.winfo_pointerx()+10}+{root.winfo_pointery()+10}")
        tooltip.deiconify()
    else:
        tooltip.withdraw()

# 绑定鼠标事件
canvas.mpl_connect('motion_notify_event', on_mouse_move)
canvas.mpl_connect('axes_leave_event', lambda e: tooltip.withdraw())

# 保留原有的按钮和Matplotlib Cursor
B = tk.Button(root, text="Cursor样式演示", relief=tk.RAISED,
              cursor="coffee_mug", width=25)
B.grid(column=0, row=4, columnspan=5, padx=4, pady=4)

cursor = Cursor(plot, useblit=True, horizOn=False, vertOn=True,
                color="green", linewidth=2.0)

root.mainloop()

关键细节说明

  • 浮动窗口设置:wm_overrideredirect(True)让tooltip成为无框悬浮窗口,避免干扰主界面布局
  • 坐标转换:canvas.canvasx(event.x)将Tkinter的像素坐标转换为Matplotlib绘图的X轴真实数据值
  • 事件监听:
    • motion_notify_event:鼠标在绘图区域移动时,实时更新tooltip的内容和位置
    • axes_leave_event:鼠标离开绘图区域时自动隐藏tooltip
  • 位置优化:tooltip位置偏移光标10像素,避免遮挡光标本身

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 14:37:24