簡體   English   中英

測試是否在python中按下了一個鍵

[英]Testing if a key is pressed in python

我想使用鍵盤快捷鍵Ctrl+Shift+H啟動一個 python 腳本。

腳本啟動時,可能仍會按下CtrlShift鍵(取決於我移開手指的速度)。

我想確保在執行腳本的其余部分之前釋放這兩個鍵。 為此,我需要測試是否按下了鍵。

請注意,在釋放鍵時觸發事件是不夠的,因為在腳本啟動時可能不會按下鍵。

我找到了幾個參考來檢測在 python 中何時按下或釋放一個鍵,但我沒有找到一個來測試是否按下了一個鍵。

你知道我怎么做嗎?

編輯:這是一個最小的例子。 您可以在此處找到 cnee 格式的文件,該文件可以在具有焦點的窗口中寫入“azerty”。 如果您在終端中鍵入以下命令,則會按預期在其中鍵入“azerty”:

cnee --replay  -sp 0 -f ./recorded_macro.xnl

為了在任何窗口(不僅僅是終端)中寫入“azerty”,我創建了一個執行此命令的鍵盤快捷鍵Ctrl+Shift+H 如果我使用快捷方式,那么在執行命令時很可能會按下CtrlShift鍵(除非我非常快速地使用快捷方式),而不是鍵入“azerty”,具有焦點的窗口將獲得Ctrl+Shift+aCtrl+Shift+zCtrl+Shift+eCtrl+Shift+rCtrl+Shift+tCtrl+Shift+y將觸發窗口中的操作但不會寫入“azerty”。

所以,我想用這個快捷方式啟動一個 python 腳本,在執行cnee命令之前等待CtrlShift不被按下。 再次注意,等待使用偵聽器釋放鍵不是解決方案,因為如果我快速使用快捷方式,則在 python 腳本開始時可能不會按下CtrlShift鍵(因此我將不得不再次CtrlShift在執行我不想要的 cnee 命令之前)。

與輸入

pynput.keyboard庫中的Controller().release()可以釋放按鈕:

import subprocess
import time 
from pynput.keyboard import Key, Controller

time.sleep(1)

keyboard = Controller()
keyboard.release(Key.shift)
keyboard.release(Key.ctrl)

subprocess.call(["cnee",  "--replay", "-sp",  "0", "-f", "/home/user/recorded_macro.xnl"])

這個解決方案很棒,因為它甚至不需要等待按鈕被釋放。

帶鍵盤(需要root權限)

keyboard.is_pressed()keyboard庫使得能夠測試是否被按下的按鈕:

import time 
import keyboard

while keyboard.is_pressed('Shift') or keyboard.is_pressed('Ctrl'):
    time.sleep(0.1)

但是,這個庫需要是 root 用戶,我不確定我是否可以使用快捷方式觸發 root 命令。

感謝@hc_dev 的指點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM