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

如何在Python中使用pynput.mouse保存多组鼠标点击坐标?

解决pynput监听鼠标点击并保存三次坐标的问题

问题根源

  1. 变量作用域问题:原代码中on_click函数内的x、y是局部变量,外部作用域无法直接访问,所以监听结束后调用print(x)会触发NameError。
  2. 监听终止过早:原代码一次点击就返回False终止监听,无法收集三次点击数据。

解决方案

使用全局变量存储点击坐标,同时添加计数器控制监听终止时机:

from pynput.mouse import Listener

# 初始化存储坐标的列表和点击计数器
click_coords = []
current_count = 0

print("请点击三次,系统将记录坐标")

def on_click(x, y, button, pressed):
    global current_count, click_coords
    # 只处理按下鼠标的动作(避免重复记录松开动作)
    if pressed:
        click_coords.append((x, y))
        print(f"已记录点击坐标: ({x}, {y})")
        current_count += 1
        # 达到三次点击后终止监听
        if current_count == 3:
            return False

# 启动监听并阻塞主线程直到监听结束
with Listener(on_click=on_click) as listener:
    listener.join()

# 输出结果
print("\n三次点击的坐标如下:")
for idx, (x, y) in enumerate(click_coords, start=1):
    print(f"第{idx}次点击: x={x}, y={y}")

代码说明

  • 用click_coords列表存储所有点击的坐标对,列表是可变对象,配合global声明可在函数内直接修改全局变量。
  • current_count计数器记录点击次数,达到3次时返回False终止监听循环。
  • 仅在pressed为True时记录坐标,避免重复处理鼠标松开的动作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 03:22:45