代码和软件在公众号【走神研究所】发送【键盘】关键字获取。
这是一款基于python的桌面小工具,能够实时显示你敲击键盘的按键,并且当摁下“J”、“N”、“T”、“M”时会发出坤音。
打开程序,随意摁下键盘,小坤坤就会张开嘴巴,显示键盘。
当触发到绝密时机的时候(键盘jntm)就会发出美妙的坤音。
现在给大家讲下整个程序的原理。
首先是资源文件,小人的图片是我从网上找的坤坤手办,用Photoshop抠出来的,在嘴部增加一个黑色圆圈,代表张嘴。再加上一个气泡框用来显示文字,图片资源就搞定了。
声音资源则是从网上找到坤坤本人的采访音频,截取出来对应的声音片段即可。
代码原理比较简单,主要基于pynput库,这个库可以监测和模拟键盘和鼠标输入,我们用这个库来实现对键盘输入的监控。
from pynput.keyboard import Listener, GlobalHotKeys, Key
class KeyBoardLister():def __init__(self, on_press_func, on_release_func, hot_keys_func_map=None):self.on_press = on_press_funcself.on_release = on_release_func# 开启热键监控if hot_keys_func_map is not None:self.start_monitor_hotkey(hot_keys_func_map)self.start_monitor_keyboard()# 键盘监测def start_monitor_keyboard(self):self.listener = Listener(on_press=self.on_press, on_release=self.on_release)self.listener.start()# 热键监控-非阻塞def start_monitor_hotkey(self, hot_keys_func_map):h = GlobalHotKeys(hot_keys_func_map)h.start()
gui采用pyqt,摁下键盘,显示张嘴小人,松开键盘,显示闭嘴小人,这样就可以实现说话的效果。
def set_char(self, ch):if ch is None:returnif ch in self.ch2audio:self.play_radio(self.ch2audio[ch])if ch == "j" or ch == "J":ch = "只因"# 设置字母if len(ch) == 1:# 显示字母font = QtGui.QFont()font.setFamily("微软雅黑")font.setPixelSize(35)font.setBold(True)self.lab_content.setFont(font)self.lab_content.setStyleSheet("color:black;")self.lab_content.move(40, 28)else:# 显示字母font = QtGui.QFont()font.setFamily("微软雅黑")font.setPixelSize(25)font.setBold(True)self.lab_content.setFont(font)self.lab_content.setStyleSheet("color:black;")self.lab_content.move(28, 28)self.lab_content.setText(ch)self.lab_content.adjustSize()# 张嘴self.lab.setPixmap(QtGui.QPixmap(resource_path(os.path.join("imgs", "cai2.png"))))# 长时间没有触发则要回归到最初状态def reset_char(self):# 清除文字self.lab_content.setText("")self.lab_content.adjustSize()# 闭嘴self.lab.setPixmap(QtGui.QPixmap(resource_path(os.path.join("imgs", "cai1.png"))))
当键盘匹配到特定输入时,就会播放对应音频,包括“jntm”四个字母,以及摁下快捷键“ctrl+j”时会播放“你干嘛”。
播放音频用的库是playsound库,这里要注意播放音频需要新开一个子线程,否则会阻塞主线程继续监听键盘。
# 开线程放音乐,避免阻断主流程,实现可以同时放多个radio
def play_radio(self, path):t = threading.Thread(target=playsound.playsound, args=(path,))t.start()
短短200行代码实现的坤音键盘,你还不来试试?