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

如何为Tkinter Canvas元素附加自定义数据并实现悬停查温度

Tkinter Canvas红外热图:鼠标悬停显示温度

我用Tkinter Canvas绘制了由32×24个矩形组成的红外热图,每个矩形对应不同温度的冷暖区域,需要实现鼠标悬停时显示对应位置的精确温度。期间遇到几个问题:

  • 鼠标事件仅返回屏幕坐标(x,y),无法直接关联温度数据
  • Tkinter Canvas创建的元素是整数ID,没法像普通组件那样直接附加自定义属性(比如w.temperature = 20.3)
  • 尝试过用lambda给单个矩形绑定带温度参数的回调,但bind是绑定在Canvas组件上而非单个矩形元素,这个方案行不通

最终用坐标映射+二维字典的方法解决,实现非常简单:

步骤1:坐标转换

将鼠标事件返回的屏幕坐标,转换为热图的网格坐标(每个矩形块假设为20×20像素):

blocksize = 20
x_grid = int(event.x / blocksize)
y_grid = int(event.y / blocksize)

步骤2:存储温度数据

提前把所有温度数据存入二维字典(也可以用二维列表,更方便):

# 示例:初始化温度字典,替换为你的实际数据
temp_data = {}
for x in range(32):
    for y in range(24):
        temp_data[(x, y)] = 20.0  # 这里填对应位置的实际温度值

步骤3:回调函数获取温度

在鼠标悬停的回调中,通过转换后的网格坐标直接取温度:

def show_temperature(event):
    blocksize = 20
    x_grid = int(event.x / blocksize)
    y_grid = int(event.y / blocksize)
    # 确保坐标在热图范围内
    if 0 <= x_grid < 32 and 0 <= y_grid < 24:
        current_temp = temp_data[(x, y)]
        # 这里可以添加显示逻辑,比如更新界面上的标签
        print(f"当前温度:{current_temp}℃")

# 绑定鼠标悬停事件到Canvas
canvas.bind("<Motion>", show_temperature)

这个方案不需要用到Canvas标签,逻辑清晰且易于维护,完美满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 22:30:16