用Python实现按热键单次记录鼠标位置与RGB至文本文件
实现热键记录鼠标位置与RGB颜色值到文本文件
需求说明
运行脚本后切换到其他程序,按下热键“1”即可单次记录当前鼠标的位置坐标和对应像素的RGB颜色值到文本文件,且避免重复写入。
原代码问题分析
- 第一段代码仅能记录鼠标坐标,无法获取RGB值;且
else里递归调用a()会导致栈溢出,逻辑冗余。 - 第二段代码错误使用
pyautogui.displayMousePosition()——这个函数是持续实时显示鼠标信息的循环函数,不会返回坐标/RGB值,直接调用会导致程序陷入无限循环,且c.write(b())尝试写入无返回值的函数结果,完全无效;同时未导入sleep模块,递归逻辑也存在栈溢出风险。
正确实现代码
import pyautogui import keyboard # 存储已记录的内容,用于去重 recorded_entries = set() # 以追加模式打开文件,避免每次运行清空原有内容;也可使用'w'清空重写 with open("log.txt", "a", encoding="utf-8") as log_file: def record_mouse_info(): # 获取当前鼠标坐标 x, y = pyautogui.position() # 获取对应坐标的RGB颜色值 r, g, b = pyautogui.pixel(x, y) # 格式化记录内容 entry = f"鼠标坐标: ({x:4d}, {y:4d}) | RGB颜色: ({r:3d}, {g:3d}, {b:3d})\n" # 检查是否已记录,避免重复写入 if entry not in recorded_entries: recorded_entries.add(entry) # 写入文件并立即刷新 log_file.write(entry) log_file.flush() print(f"已记录: {entry.strip()}") # 绑定热键:按下"1"触发记录函数 keyboard.add_hotkey("1", record_mouse_info) print("脚本已启动,按下'1'记录鼠标信息,按下'Esc'退出脚本") # 等待按下Esc键退出,确保文件正常关闭 keyboard.wait("esc")
代码关键点说明
- 使用
pyautogui.pixel(x, y)直接获取指定坐标的RGB值,替代无法获取返回值的displayMousePosition()。 - 用
keyboard.add_hotkey()绑定热键,无需循环检测按键,逻辑更简洁高效,避免阻塞。 - 通过
set集合存储已记录的内容,写入前检查是否存在,彻底避免重复记录。 - 使用
with语句管理文件,即使中途按Ctrl+C或Esc退出,文件也会自动关闭,确保内容不会丢失。
内容的提问来源于stack exchange,提问作者Basem Ayad
相关产品推荐
相关产品推荐

