PyQt5和SystemHotKey構造全域性熱鍵

2021-10-03 03:26:45 字數 2221 閱讀 3094

測試了3個熱鍵庫,最終systemhotkey庫使用最簡單,安裝方法

簡易的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)
至此流程閉環

demo

from system_hotkey import systemhotkey

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"))

#熱鍵處理函式

defmkey_pressevent

(self,i_str)

:print

("按下的按鍵是%s"

%(i_str,))

#熱鍵訊號傳送函式(將外部訊號,轉化成qt訊號)

defsend_key_event

(self,i_str)

: self.sig_keyhot.emit(i_str)

if __name__ ==

"__main__"

:import sys

dialog_main = qdialog(

) ui = c_demo(dialog_main)

dialog_main.show())

)

執行截圖

搜尋packageindex 到python的package庫

搜尋想找的功能,比如這個熱鍵,搜尋hotkey

檢視簡介和demo就能找到需要的包

很多部落格貼上複製出來的demo寫的著實令人迷惑,別在這個上邊浪費很多時間,找到合適的輪子,官網demo還是準,還能檢查版本是否匹配

pyqt5切換python版本 pyqt5介面切換

主要的思路就是建立兩個frame 如果有兩個以上同理 使用setvisible 函式顯示或者隱藏frame 引數是bool值 import sys from pyqt5.qtwidgets import from pyqt5.qtcore import from pyqt5.qtgui import...

學習PyQt5(三) PyQt5的訊號和槽

我 如圖所示,我們建立乙個按鈕及乙個瀏覽器。什麼是訊號?比如按鈕的單擊,雙擊,按下,釋放等,都可以認為是乙個訊號 什麼是槽?對應的訊號,做出什麼應對,這要乙個應對在乙個函式中,我們可以認為這就是乙個訊號 槽關係 在qt designer中點選工具欄 注意不是工具盒 中的這個圖示 點選這個圖示後,就進...

pyqt5多執行緒優化 PyQt5多執行緒

您不應該向主檢視傳送乙個新的小部件 qlabel 因為它將是乙個新標籤,而不是原始標籤,您應該傳送str型別的文字class thread qthread changepixmap pyqtsignal qpixmap changelabel pyqtsignal str def run self ...