标签:__ demo self 热键 pyqt 快捷键 hk str 全局
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还是准,还能检查版本是否匹配
标签:__,demo,self,热键,pyqt,快捷键,hk,str,全局 来源: https://www.cnblogs.com/ksxh/p/14074838.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。