[英]Testing if a key is pressed in python
我想使用鍵盤快捷鍵Ctrl+Shift+H
啟動一個 python 腳本。
腳本啟動時,可能仍會按下Ctrl
和Shift
鍵(取決於我移開手指的速度)。
我想確保在執行腳本的其余部分之前釋放這兩個鍵。 為此,我需要測試是否按下了鍵。
請注意,在釋放鍵時觸發事件是不夠的,因為在腳本啟動時可能不會按下鍵。
我找到了幾個參考來檢測在 python 中何時按下或釋放一個鍵,但我沒有找到一個來測試是否按下了一個鍵。
你知道我怎么做嗎?
編輯:這是一個最小的例子。 您可以在此處找到 cnee 格式的文件,該文件可以在具有焦點的窗口中寫入“azerty”。 如果您在終端中鍵入以下命令,則會按預期在其中鍵入“azerty”:
cnee --replay -sp 0 -f ./recorded_macro.xnl
為了在任何窗口(不僅僅是終端)中寫入“azerty”,我創建了一個執行此命令的鍵盤快捷鍵Ctrl+Shift+H
。 如果我使用快捷方式,那么在執行命令時很可能會按下Ctrl
和Shift
鍵(除非我非常快速地使用快捷方式),而不是鍵入“azerty”,具有焦點的窗口將獲得Ctrl+Shift+a
、 Ctrl+Shift+z
、 Ctrl+Shift+e
、 Ctrl+Shift+r
、 Ctrl+Shift+t
和Ctrl+Shift+y
將觸發窗口中的操作但不會寫入“azerty”。
所以,我想用這個快捷方式啟動一個 python 腳本,在執行cnee
命令之前等待Ctrl
和Shift
不被按下。 再次注意,等待使用偵聽器釋放鍵不是解決方案,因為如果我快速使用快捷方式,則在 python 腳本開始時可能不會按下Ctrl
和Shift
鍵(因此我將不得不再次Ctrl
和Shift
在執行我不想要的 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.