python 控制和监控鼠标输入 pynput模块

控制鼠标输入

使用 pynput.mouse.Controller 来实现

from pynput.mouse import Button, Controller

mouse = Controller()

# 读取鼠标的位置
print('The current pointer position is {0}'.format(
    mouse.position))

# 设置鼠标的位置
mouse.position = (10, 20)
print('Now we have moved it to {0}'.format(
    mouse.position))

# 以当前鼠标位置为原点来移动鼠标
mouse.move(5, -5)

# 按下鼠标和释放鼠标
mouse.press(Button.left)
mouse.release(Button.left)

# 双击
# twice on macOS
mouse.click(Button.left, 2)

# 滚动鼠标
mouse.scroll(0, 2)

监测鼠标

用 pynput.mouse.Listener 来实现

from pynput import mouse

# 监测鼠标移动,坐标值
def on_move(x, y):
    print('Pointer moved to {0}'.format(
        (x, y)))

# 监测鼠标点击
def on_click(x, y, button, pressed):
    print('{0} at {1}'.format(
        'Pressed' if pressed else 'Released',
        (x, y)))
    if not pressed:
        # Stop listener
        return False

# 监测鼠标滚动
def on_scroll(x, y, dx, dy):
    print('Scrolled {0} at {1}'.format(
        'down' if dy < 0 else 'up',
        (x, y)))

# 鼠标的监听器是 threading.Thread,并且所有的回调函数都会在线程中被调用
#  可以手动调用 pynput.mouse.Listener.stop 来触发StopException或从回调函数中返回False,实现线程终止
with mouse.Listener(
        on_move=on_move,
        on_click=on_click,
        on_scroll=on_scroll) as listener:
    listener.join()

# 以非阻塞的方式运行
listener = mouse.Listener(
    on_move=on_move,
    on_click=on_click,
    on_scroll=on_scroll)
listener.start()

鼠标监测线程可以直接从其他线程调用,这意味着如果没有设置回调函数,将会阻塞所有进程的输入,一个可能的解决办法是将其传入消息队列,然后用一个单独的线程来进行管理
如果回调处理程序引发异常,则监测器将停止。由于回调在专用的线程中运行,因此不会自动引发异常。要获得有关回调错误的通知,需要在实例上调用 Thread.join

from pynput import mouse

class MyException(Exception): pass

def on_click(x, y, button, pressed):
    if button == mouse.Button.left:
        raise MyException(button)

# Collect events until released
with mouse.Listener(
        on_click=on_click) as listener:
    try:
        listener.join()
    except MyException as e:
        print('{0} was clicked'.format(e.args[0]))
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值