pyqt全域性快捷鍵
阿新 • • 發佈:2020-12-02
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還是準,還能檢查版本是否匹配