亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 PyQt5 中檢測外部鍵盤事件

在 PyQt5 中檢測外部鍵盤事件

慕標5832272 2023-04-18 15:47:34
如何在 PyQT5 中實現關鍵監聽器?即使應用程序處于后臺,我也想檢測按鍵。from PyQt5 import QtGuifrom PyQt5.QtWidgets import *from PyQt5.QtCore import Qtimport sysclass Window(QWidget):        ...           def keyPressEvent(self, e): # doesnt work when app is in background        if e.key() == Qt.Key_F3:            print(1)        elif e.key() == Qt.Key_F4:            print(0)   ...        App = QApplication(sys.argv)App.setStyle('Fusion')window = Window()sys.exit(App.exec())
查看完整描述

1 回答

?
MM們

TA貢獻1886條經驗 獲得超2個贊

僅當其任何頂級窗口具有鍵盤焦點時,Qt 才能訪問鍵盤事件。如果窗口最小化或另一個窗口獲得焦點,您將不會收到鍵盤事件。

唯一的解決方案是使用外部庫,但它們有局限性。

鍵盤模塊似乎不支持 macOS,而pyinput支持,但需要該操作系統的根訪問權限。我不知道有任何其他方式可以無限制地支持所有三個平臺。

在任何情況下,您都不應該依賴于對當前按下的鍵的定時檢查,因為您最終肯定會錯過一些事件。
雖然通常人們會使用一個單獨的線程來實現事件偵聽器(通常是阻塞的),但幸運的是,在這兩種情況下都有非阻塞系統來調用回調函數(因此您實際上不需要單獨的線程)。

以下是使用該keyboard模塊的基本示例:

from PyQt5 import QtCore, QtWidgets

import keyboard


class KeyGrabber(QtWidgets.QWidget):

? ? def __init__(self):

? ? ? ? super().__init__()

? ? ? ? layout = QtWidgets.QVBoxLayout(self)

? ? ? ? self.button = QtWidgets.QPushButton('start')

? ? ? ? layout.addWidget(self.button)

? ? ? ? self.button.setCheckable(True)

? ? ? ? self.button.toggled.connect(self.setGrabbing)


? ? def keyboardEventReceived(self, event):

? ? ? ? if event.event_type == 'down':

? ? ? ? ? ? if event.name == 'f3':

? ? ? ? ? ? ? ? print('F3 pressed')

? ? ? ? ? ? elif event.name == 'f4':

? ? ? ? ? ? ? ? print('F4 pressed')


? ? def setGrabbing(self, enable):

? ? ? ? if enable:

? ? ? ? ? ? self.button.setText('stop')

? ? ? ? ? ? # on_press returns a hook that can be used to "disconnect" the callback

? ? ? ? ? ? # function later, if required

? ? ? ? ? ? self.hook = keyboard.on_press(self.keyboardEventReceived)

? ? ? ? ? ? self.showMinimized()

? ? ? ? else:

? ? ? ? ? ? self.button.setText('start')

? ? ? ? ? ? keyboard.unhook(self.hook)


查看完整回答
反對 回復 2023-04-18
  • 1 回答
  • 0 關注
  • 269 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號