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還是准,還能檢查版本是否匹配