1. 程式人生 > 實用技巧 >pyqt全域性快捷鍵

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