使用pynput包同时监听键盘消息和鼠标消息

pynput包可以监听键盘消息和鼠标消息,但是你很难找到既监听鼠标消息又监听键盘消息例子。其主要原因就是大部分示例中监听鼠标和键盘消息时都采用了阻塞式的监听方式,即

 listener.join()

程序调用监听器的join()方法后,即被阻塞,不再执行后面的语句,以这种方式启动监听器,只能监听在某个监听器的join()方法调用前已启动的监听器的消息。因此,除了最后一个监听器外,其他监听器不能用listener.join()的方式启动,只能用非阻塞的listener.start()的方式启动。最后一个监听器则应当以listener.join()的方式启动,以使程序执行被阻塞,防止程序直接结束。示例代码如下:

import pynput
import sys

'''
    本程序演示使用pynput库同时监控键盘事件和鼠标事件。要同时监控键盘事件和鼠标事件,
    必须用非阻塞方式启动键盘监听线程和鼠标监听线程,也就是说除了最后一个监听器外,不
    能用listener.join()的方式启动,只能用listener.start()的方式启动。最后一个监听器
    则应当以listener.join()的方式启动,以使程序执行被阻塞,防止程序直接结束
'''
start_x = 0
start_y = 0
#鼠标事件处理函数。鼠标左键抬起时输出鼠标左键按下和抬起时的位置
def on_click(x, y, button, pressed):
    global start_x, start_y
    if pressed and button == pynput.mouse.Button.left:
        (start_x, start_y) = (x, y)
    elif (not pressed) and (button == pynput.mouse.Button.left):
        print(f'\n鼠标左键按下并抬起一次。\n按下时的位置:start_x={start_x}, ', 
                    f'start_y={start_y}\n抬起时的位置end_x={x}3, end_y={y}')

#键盘事件处理函数。输出被按下的键,按下'e'键结束程序
def on_press(key):
        print(f'按键{key}被按下\n')
        if (key == pynput.keyboard.KeyCode(char = 'e')):
            sys.exit()

#以非阻塞的方式启动鼠标监控
mouse_listener = pynput.mouse.Listener(on_click=on_click)
mouse_listener.start()

#最后一个监听器以阻塞方式启动
with pynput.keyboard.Listener(on_press=on_press) as keybord_listener:
    keybord_listener.join()

  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yivifu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值