pyqt全局快捷键

PyQt5和SystemHotKey构造全局热键

包的选择

  1. 测试了3个热键库,最终SystemHotKey库使用最简单,安装方法

pip3 install system_hotkey
官方地址:https://github.com/timeyyy/system_hotkey

  1. 简易的demo,搬运官方
from system_hotkey import SystemHotkey
hk = SystemHotkey()
hk.register(('control', 'shift', 'h'), callback=lambda x: print("Easy!"))

一个简单的思路

  1. 准备一个PyQt信号,和一个热键信号
sig_keyhot = pyqtSignal(str)
self.hk_start = SystemHotkey()
  1. 绑定热键信号到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)

 

  1. 绑定PyQt信号和PyQt槽
self.sig_keyhot.connect(self.MKey_pressEvent)

 

  • 1
  1. 至此流程闭环

完整demo

  1. 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_())

 

  1. 运行截图
    在这里插入图片描述

总结

    1. 搜索packageindex 到python的package库
    2. 搜索想找的功能,比如这个热键,搜索hotkey
    3. 查看简介和demo就能找到需要的包
    4. 很多博客粘贴复制出来的demo写的着实令人迷惑,别在这个上边浪费很多时间,找到合适的轮子,官网demo还是准,还能检查版本是否匹配
posted @ 2020-12-02 16:56  sunny开始学坏  阅读(2648)  评论(1编辑  收藏  举报