python实现侦听键盘事件,将功能函数绑定到按键上

最近尝试控制台小程序,以及快捷键组合的时候需要用到侦听键盘事件的操作,然后查阅了相关的材料,发现keyboard模块比较适合我目前的需求,在这做一下自己的见解,顺便记录一下笔记。如果你有下面的问题,或者想了解python键盘有关的操作这篇文章很适合你

如何用python实现键盘监听功能

如何按一个键就能自动执行很多键

如何自动按键

如何用python实现按方向键可上下移动

python实现按一个键执行一个函数的功能

请不要用于任何非法用途,仅学习研究用,若由此产生的任何责任自行承担,与本文及本文作者无关!

目录

安装keyboard模块

按键的字符参数:

常用方法

send()

press()

release()

wait()

add_hotkey()

record()

play()

hook()

KeyboardEvent()

更多方法

End


安装keyboard模块

pip install 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()

执行结果(该方法也可达到键盘监听效果)

python实现侦听键盘事件,将功能函数绑定到按键上_第1张图片

常用方法

send()

用来向OS发送快捷键事件,使得操作系统执行相关快捷指令,支持多步操作

举例:

import keyboard

keyboard.send('windows+r')
keyboard.send('windows+r,enter')

向系统发送windows+r快捷键

多步操作,向系统发送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()

分别定义两个函数test1和test2

实现快捷键功能,当我们按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()

无论按什么按键都会触发abc函数,执行abc函数。

KeyboardEvent()

按键事件,常用的三个参数如下:

event_type:按键的类型是按下还是弹起(down/up)

scan_code:按键号,每个按键都有对应的编号,按键的值

name:按键的名字

举例:

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

End

你可能感兴趣的:(Python)