本篇文章主要讲pynput的键盘监听,以及一个demo“ikun键盘程序”
1.全局键盘监听
1.1 pynput.keyboard.Listener
这是pynput的子模块keyboard中的一个类,keyboard子模块都是关于键盘操作和监听的
Listener类有两个重要的构造参数,也是我们使用最多的:
1 | Listener(on_press=按下按键时触发的函数,on_release=松开按键时触发的函数) |
一般在程序中我们这么使用:
1 | with keyboard.Listener(on_press=按下按键触发的函数,on_release=松开按键触发的函数) as listener: |
按下或者松开按键所触发的函数还有一个参数用来接收按键信息,我一般用key作为参数名
listener.join()是线程阻塞函数,它会让这块代码所在的函数始终监听键盘,所以如果有其他需要阻塞线程或者使用主循环的函数(比如rkinter的mainloop()函数)应该使用多线程
举个例子:
1 | from pynput import keyboard#首先导入模块 |
1.2获取背按下或者被松开的按键
此时被的触发函数接收的参数key派上了用途。如果是普通按键(就是字母或数字之类),key会有一个叫做char的属性,char本身是一个python字符串,我们可以判断字符串从而得知按下或者松开了哪个键。
举个例子:
1 | from pynput import keyboard#首先导入模块 |
但是还有特殊按键的存在呢!比如说ctrl、alt、shift等,如果按下或松开这种特殊按键,传入的key可就不一样了,它没有char属性,所以会报错AttributeError: ‘Key’ object has no attribute ‘char’ 于是我们可以用try…except语句,如果程序没遇到AttributeErro,就按普通按键处理,如果遇到了,就是特殊按键,而特殊按键可以在keyboard模块的Key中找到它们的“尊姓大名”,比如keyboard.Key.esc
下面请看例子:
1 | from pynput import keyboard#首先导入模块 |
这样按下特殊按键不会报错了
1.3 组合键监听-特殊转义字符
pynput可以监听很多组合键,并且给触发的函数传入转义字符,例如<48>是表示ctrl+0
注意,使用组合键监听需要keyboard模块的另外一员大将– Controller。
下面看例子:
1 | from pynput.keyboard import Key, Controller,Listener |
组合键键值表如下(摘自Python中的pynput中组合键的键值_一个小坑货的博客-CSDN博客_pynput 组合键):
1 | keyboard_key_dict = { |
1.4 keyboard.GlobalHotkey热键
这个类需要以一个字典为参数,字典结构是{“热键”:触发函数},热键名是字符串,如果拼写不正确是会报错的
举例:
1 | from pynput import keyboard |
2. ikun专属键盘(滑稽)
(提示:适当玩梗,笑梗不笑人,demo仅供学习需要)
音频播放我们使用playsound模块,可以直接pip安装,音频文件请自备
1 | from pynput import keyboard#首先导入模块 |
这样就有了一个可以挂在后台的ikun键盘程序,可以根据个人喜好完善,还可以放进开机自启动文件夹中(滑稽
完整项目(含音频文件),给颗star吧:GitHub完整项目