本篇文章主要讲pynput的键盘监听,以及一个demo“ikun键盘程序”
1. 全局键盘监听
1.1 pynput.keyboard.Listener
这是pynput的子模块keyboard中的一个类,keyboard子模块都是关于键盘操作和监听的
Listener类有两个重要的构造参数,也是我们使用最多的:
Listener(on_press=按下按键时触发的函数,on_release=松开按键时触发的函数)
一般在程序中我们这么使用:
with keyboard.Listener(on_press=按下按键触发的函数,on_release=松开按键触发的函数) as listener:
listener.join()
按下或者松开按键所触发的函数还有一个参数用来接收按键信息,我一般用key作为参数名
listener.join()是线程阻塞函数,它会让这块代码所在的函数始终监听键盘,所以如果有其他需要阻塞线程或者使用主循环的函数(比如rkinter的mainloop()函数)应该使用多线程
举个例子:
from pynput import keyboard#首先导入模块
def key_press(key):#定义按键按下时触发的函数
print("按键被按下了")
def key_release(key):
print("按键被松开了")
with keyboard.Listener(on_press=key_press,on_release=key_release) as listener:
listener.join()
1.2 获取被按下或者被松开的按键
此时被的触发函数接收的参数key派上了用途。如果是普通按键(就是字母或数字之类),key会有一个叫做char的属性,char本身是一个python字符串,我们可以判断字符串从而得知按下或者松开了哪个键。
举个例子:
from pynput import keyboard#首先导入模块
def key_press(key):#定义按键按下时触发的函数
print(f"按键{key.char}被按下了")
def key_release(key):
print(f"按键{key.char}被松开了")
with keyboard.Listener(on_press=key_press,on_release=key_release) as listener:
listener.join()
但是还有特殊按键的存在呢!比如说ctrl、alt、shift等,如果按下或松开这种特殊按键,传入的key可就不一样了,它没有char属性,所以会报错AttributeError: 'Key' object has no attribute 'char'
于是我们可以用try…except语句,如果程