最近尝试控制台小程序,以及快捷键组合的时候需要用到侦听键盘事件的操作,然后查阅了相关的材料,发现keyboard模块比较适合我目前的需求,在这做一下自己的见解,顺便记录一下笔记。如果你有下面的问题,或者想了解python键盘有关的操作这篇文章很适合你
如何用python实现键盘监听功能
如何按一个键就能自动执行很多键
如何自动按键
如何用python实现按方向键可上下移动
python实现按一个键执行一个函数的功能
请不要用于任何非法用途,仅学习研究用,若由此产生的任何责任自行承担,与本文及本文作者无关!
目录
安装keyboard模块
按键的字符参数:
字符键:
'1'
'a'
......等
控制键:
'alt'
'alt gr'
'ctrl'
'left alt'
'left ctrl'
'left shift'
'left windows'
'right alt'
'right ctrl'
'right shift'
'right windows'
'shift'
'windows'
'enter'
'esc'
'f1'
'f2'
......等
方向键:
'up'
'down'
'left'
'right'
......
组合键:
'ctrl'+'alt'+'a'
......等
利用下面的代码通过控制台按键可以获取所有按键的string串
import keyboard
def abc(x):
print(x)
if __name__ == '__main__':
keyboard.hook(abc)
keyboard.wait()
常用方法
send()
用来向OS发送快捷键事件,使得操作系统执行相关快捷指令,支持多步操作
import keyboard
keyboard.send('windows+r')
keyboard.send('windows+r,enter')
多步操作,向系统发送windows+r快捷键后然后再发送回车enter键
press()
import keyboard
keyboard.press('a')
release()
释放一个热键,一般和press()组合用,或者直接用send()
import keyboard
keyboard.press('a')
keyboard.release('a')
wait()
用来监听当前按键是否为要求按键,如果不是则一直进行监听,直到为要求按键才会继续执行
import keyboard
print(1)
keyboard.wait('q')
print(2)
keyboard.wait('w')
print(3)
上面的代码,输出1之后进入监听状态,除非按键盘q键才会继续执行print(2)语句,不然一直处于监听键盘按键状态,不会继续执行后面的代码
add_hotkey()
用来设置按键,一般与wait()组合使用,利用wait()空值监听可以达到循环效果,函数可携带参数,带参数例子往下见record()方法的例子
import keyboard
def test1():
print("Is 1")
def test2():
print("Is 2")
if __name__ == '__main__':
keyboard.add_hotkey('q',test1)
keyboard.add_hotkey('ctrl+1',test2)
keyboard.wait()
实现快捷键功能,当我们按q键的时候执行test1函数输出Is 1,当我们按组合键Ctrl+1的时候执行test2函数输出Is 2 从而达到快捷键效果
record()
该方法用来记录键盘的事件,返回值为事件列表,如果给其加上until参数,则可以设置当按下某一按键时结束侦听,类似wait()方法
import keyboard
def test(x):
print("My name is %s" % x)
keyboard.add_hotkey('q',test,args=('Tom',))
rec = keyboard.record(until='esc')
print(rec)
当按q键时,输出My name is Tom,然后record()方法会进行键盘的记录,将其保存为列表,返回列表,传到rec变量里面。
play()
重复已经记录的操作,一般与record()组合,其中有一个参数比较常用
speed_factor = 1.0 # 速度因子,控制重复的速度,可不填,默认1.0
import keyboard
def tests():
print('test')
keyboard.add_hotkey('q',tests)
re = keyboard.record(until='esc')
keyboard.play(re)
record将上面按q键的次数进行记录,以列表的形式放入re变量,然后play()方法会重复re列表里面的操作,重复的速度由速度因子决定。
hook()
import keyboard
def abc(x):
print(x)
if __name__ == '__main__':
keyboard.hook(abc)
keyboard.wait()
KeyboardEvent()
event_type:按键的类型是按下还是弹起(down/up)
scan_code:按键号,每个按键都有对应的编号,按键的值
import keyboard
def test(x):
a = keyboard.KeyboardEvent('down',28,'enter')
if x.event_type == 'down' and x.name == 'enter':
print("你按下了enter键")
keyboard.hook(test)
keyboard.wait()
enter按键的值为28,如果不知道按键的值可以用hook绑定事件后用x.scan_code进行输出,代码如下:
import keyboard
def test(x):
print(x.scan_code)
keyboard.hook(test)
keyboard.wait()
更多方法
以上为常见的几种方法,更多的方法请参见下方链接
https://github.com/boppreh/keyboard#api
https://github.com/boppreh/keyboard/blob/master/README.md
https://www.jianshu.com/p/8e508c6a05ce