场景:买了个新鼠标 ,感觉滚动有问题 、存在跳跃情况 ;
(运行下面脚本并滚动鼠标即可)

bash
import time
from pynput import mouse
# 全局变量,用于存储上一次滚轮事件发生的时间
last_scroll_time = None
# 用于记录滚动次数和事件编号
scroll_count = 0
def on_scroll(x, y, dx, dy):
"""
滚轮事件回调函数
x, y: 鼠标当前位置坐标
dx, dy: 滚轮滚动的方向和量 (dy > 0 表示向上滚,dy < 0 表示向下滚)
"""
global last_scroll_time, scroll_count
current_time = time.time()
scroll_count += 1
# 确定滚动方向
direction = "上滚 (Up)" if dy > 0 else "下滚 (Down)"
print(f"\n--- 滚动事件 #{scroll_count} ---")
print(f"位置: ({x:.0f}, {y:.0f}) | 方向: {direction} | 量: {abs(dy)}")
if last_scroll_time is not None:
# 计算两次事件之间的时间间隔
time_diff = current_time - last_scroll_time
# 如果时间间隔极短(比如小于 0.001 秒),可能是系统或硬件的快速响应,但我们主要关注可感知的时间差
if time_diff < 0.1:
print(f"**间隔时间 (Time Diff): {time_diff:.4f} 秒 - **快速滚动**")
else:
print(f"间隔时间 (Time Diff): {time_diff:.4f} 秒")
# 异常检测:如果间隔时间过长,可能代表滚轮有"失灵"或"卡顿"的现象
# 注意:这里的阈值 (e.g., 0.5秒) 需要根据你的正常使用习惯来调整
if time_diff > 0.5 and scroll_count > 1:
print("**🚨 警告:上次滚动和本次滚动间隔过长(> 0.5s),可能存在滚轮跳帧或接触不良问题。**")
last_scroll_time = current_time
def start_listening():
"""启动鼠标监听器"""
print("📢 鼠标滚轮监听已启动。请开始滚动滚轮进行测试...")
print("按下 Ctrl+C 即可退出程序。")
# 创建并启动监听器
with mouse.Listener(on_scroll=on_scroll) as listener:
listener.join()
if __name__ == "__main__":
try:
# 使用线程启动监听,避免阻塞主程序,但 pynput 的 Listener 默认是阻塞的,
# 直接在主线程 with block 中运行更简单、更稳定。
start_listening()
except KeyboardInterrupt:
# 捕获 Ctrl+C 退出
print("\n\n✅ 程序已退出。")
except Exception as e:
print(f"\n发生错误: {e}")