第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

在 PyQt5 中檢測(cè)外部鍵盤(pán)事件

在 PyQt5 中檢測(cè)外部鍵盤(pán)事件

慕標(biāo)5832272 2023-04-18 15:47:34
如何在 PyQT5 中實(shí)現(xiàn)關(guān)鍵監(jiān)聽(tīng)器?即使應(yīng)用程序處于后臺(tái),我也想檢測(cè)按鍵。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貢獻(xiàn)1886條經(jīng)驗(yàn) 獲得超2個(gè)贊

僅當(dāng)其任何頂級(jí)窗口具有鍵盤(pán)焦點(diǎn)時(shí),Qt 才能訪問(wèn)鍵盤(pán)事件。如果窗口最小化或另一個(gè)窗口獲得焦點(diǎn),您將不會(huì)收到鍵盤(pán)事件。

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

鍵盤(pán)模塊似乎不支持 macOS,而pyinput支持,但需要該操作系統(tǒng)的根訪問(wèn)權(quán)限。我不知道有任何其他方式可以無(wú)限制地支持所有三個(gè)平臺(tái)。

在任何情況下,您都不應(yīng)該依賴于對(duì)當(dāng)前按下的鍵的定時(shí)檢查,因?yàn)槟罱K肯定會(huì)錯(cuò)過(guò)一些事件。
雖然通常人們會(huì)使用一個(gè)單獨(dú)的線程來(lái)實(shí)現(xiàn)事件偵聽(tīng)器(通常是阻塞的),但幸運(yùn)的是,在這兩種情況下都有非阻塞系統(tǒng)來(lái)調(diào)用回調(diào)函數(shù)(因此您實(shí)際上不需要單獨(dú)的線程)。

以下是使用該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)


查看完整回答
反對(duì) 回復(fù) 2023-04-18
  • 1 回答
  • 0 關(guān)注
  • 284 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)