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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM