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

如何在tkinter中追踪鼠标移动?<Motion>事件绑定无输出问题求解

问题原因分析
  • 第一版代码失效的核心原因是事件绑定对象错误:你将<Motion>事件绑定到了MyGUI这个Frame子类的实例上,但Frame内部放置的Canvas组件完全填充了Frame的可视区域。鼠标在网格区域移动时,事件只会被当前悬停的Canvas组件捕获,不会触发上层Frame的绑定回调,因此motion方法永远不会执行,自然没有输出也不会抛出错误。
  • 修改后的代码能正常运行,是因为你将事件绑定到了顶层窗口Tk实例上,顶层窗口可以接收其内部所有子组件上触发的鼠标移动事件,所以不管鼠标在窗口内哪个区域移动,都会触发回调逻辑。
符合封装规范的修正方案

你不需要把事件绑定逻辑放到类的外部,也不需要绑定到顶层窗口,只需要把事件绑定到实际需要监听的Canvas组件上即可,既保证所有逻辑都封装在MyGUI类内,也能精准监听网格区域的鼠标动作:
将第一版代码中的self.bind('<Motion>', self.motion)修改为self.canvas.bind('<Motion>', self.motion)即可,其余代码无需调整,运行后就能在鼠标移动过网格时正常输出坐标。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 15:54:01