1.完整代码
简单介绍:
1.响应事件
连续按下qqq触发函数test((1,2,3),{“1”:2})
连续按下awa触发函数test([],{})
连续按下ppppp触发默认事件关闭监听
2.关于初始化参数
listen_lst就是用户自定义的响应事件
time.min是按键最短间隔,超时会清零
str_len是记录按键的最大长度
end_key是默认监听事件关闭的
from pynput.keyboard import Listener
import time
class listen:
def __init__(self,listen_lst,time_min=0.5,str_len=30,end_key="ppppp"):
#listen_lst:["qqqq",func,args,kwargs],按下qqqq后调用函数func(*args,**kwargs)
#time.min代表按键最短间隔,超过时间则按键清零
#str_len 最长监听长度
self.listen_lst=sorted(listen_lst,key=lambda x:len(x[0]))#按照"qqqq"长度排序
self.listen_lst.append([end_key,self.stop_listen,[],{}])
self.time_min=time_min
self.now_str=""
self.str_len=str_len
self.now_time=time.time()
self.listener=None
def on_press(self,key):
key=str(key).replace("'","")
mid_time=time.time()
if mid_time>self.now_time+self.time_min:
self.now_str=key
else:
self.now_str=self.now_str+key
self.now_time=mid_time
if len(self.now_str)>self.str_len:
self.now_str=self.now_str[-self.str_len:]
for item in self.listen_lst:
listen_key=item[0]
now_str=self.now_str[-len(listen_key):]
if (listen_key==now_str):
print("按下",now_str)
item[1](*item[2],**item[3])
def stop_listen(self):
if self.listener is not None:
self.listener.stop()
def run(self):
with Listener(on_press=self.on_press) as listener:
self.listener=listener
listener.join()
def test(*args,**kwargs):
print("test",args,kwargs)
if __name__ == '__main__':
a=listen([["qqq",test,(1,2,3),{"1":2}],["awa",test,[],{}]])
a.run()
2.测试结果
运行测试代码连续按键qqqawappppp打印的数据
按下 qqq
test (1, 2, 3) {'1': 2}
按下 awa
test () {}
按下 ppppp
3.类的补充(TODO)
1.将监听事件放入线程
2.enter等非字符串按键未作处理(如ctrl+a无法监听,需要完善)
4.如有疑惑请直接评论或发邮箱
luzhanzhisifangxiu@163.com