PyQt5和SystemHotKey构造全局热键
包的选择
- 测试了3个热键库,最终SystemHotKey库使用最简单,安装方法
pip3 install system_hotkey
官方地址:https://github.com/timeyyy/system_hotkey
- 简易的demo,搬运官方
from system_hotkey import SystemHotkey hk = SystemHotkey() hk.register(('control', 'shift', 'h'), callback=lambda x: print("Easy!"))
一个简单的思路
- 准备一个PyQt信号,和一个热键信号
sig_keyhot = pyqtSignal(str) self.hk_start = SystemHotkey()
- 绑定热键信号到Pyqt信号
self.hk_start.register(('control','1'),callback=lambda x:self.send_key_event("start")) def send_key_event(self,i_str): self.sig_keyhot.emit(i_str)
- 绑定PyQt信号和PyQt槽
self.sig_keyhot.connect(self.MKey_pressEvent)
- 1
- 至此流程闭环
完整demo
- demo
from system_hotkey import SystemHotkey from PyQt5.QtWidgets import QApplication,QWidget,QDialog from PyQt5.QtCore import QObject,pyqtSignal #这里之所以继承QObject是因为要使用自定义信号(PyQt5要求) class c_demo(QWidget,QObject): #定义一个热键信号 sig_keyhot = pyqtSignal(str) def __init__(self,From): #1. 简单的绘制一个窗口 super().__init__(From) From.resize(100,150) #2. 设置我们的自定义热键响应函数 self.sig_keyhot.connect(self.MKey_pressEvent) #3. 初始化两个热键 self.hk_start,self.hk_stop = SystemHotkey(),SystemHotkey() #4. 绑定快捷键和对应的信号发送函数 self.hk_start.register(('control','1'),callback=lambda x:self.send_key_event("start")) self.hk_stop.register(('control', '2'), callback=lambda x: self.send_key_event("stop")) #热键处理函数 def MKey_pressEvent(self,i_str): print("按下的按键是%s" % (i_str,)) #热键信号发送函数(将外部信号,转化成qt信号) def send_key_event(self,i_str): self.sig_keyhot.emit(i_str) if __name__ == "__main__": import sys app = QApplication(sys.argv) Dialog_main = QDialog() ui = c_demo(Dialog_main) Dialog_main.show() sys.exit(app.exec_())
- 运行截图
总结
- 搜索packageindex 到python的package库
- 搜索想找的功能,比如这个热键,搜索hotkey
- 查看简介和demo就能找到需要的包
- 很多博客粘贴复制出来的demo写的着实令人迷惑,别在这个上边浪费很多时间,找到合适的*,官网demo还是准,还能检查版本是否匹配