[英]How to pause a pynput event listener
我正在嘗試制作一個程序來讀取用戶的輸入,如果它檢測到某個組合鍵,它將輸入一個特殊字符。 目前我正在測試,我希望腳本在用戶鍵入的每個字符后僅 output 一個“+”。 我正在使用 pynput 事件偵聽器來確定是否按下了某個鍵並使用“暫停”變量,以便“+”的 output 不會導致事件偵聽器進行無限循環。 問題是事件監聽器無論如何都會進入無限循環,我不知道為什么。
每次按鍵后當前鍵入的 output: +++++++++++++++++++...
每次按鍵后所需鍵入的 output: +
每次按鍵后的當前控制台 output:
暫停是假的
被壓
被釋放
['F']
暫停
發送輸出
未暫停
暫停是假的
被壓
被釋放
['+']
暫停
發送輸出
未暫停
暫停是假的
被壓
被釋放
['+']
暫停
發送輸出
未暫停
暫停是假的
被壓
被釋放
...
每次按鍵后所需的控制台 output:
暫停是假的
被壓
被釋放
['F']
暫停
發送輸出
暫停為真
未暫停
import pynput
import time
from pynput.keyboard import Key, Listener, Controller
keyboardOut = Controller()
PressedKeys = []
ReleasedKeys = []
Pause = False
def on_press(key):
global PressedKeys, ReleasedKeys, Pause
print("pause is "+str(Pause))
if Pause == False:
print("getting pressed")
PressedKeys.append(key)
else:
return
def on_release(key):
global PressedKeys, ReleasedKeys, Pause
if Pause == False and len(PressedKeys) > 0:
print("getting released")
ReleasedKeys.append(key)
test_frame()
else:
return
def test_frame():
global Pause
print(PressedKeys)
Pause = True
print("paused")
print("send outputs")
keyboardOut.press('+')
keyboardOut.release('+')
PressedKeys.clear()
ReleasedKeys.clear()
Pause = False
print("unpaused")
time.sleep(1)
# Collect events until released
with Listener(
on_press=on_press,
on_release=on_release) as listener:
listener.join()
在使用鍵盤 controller 之前,您必須停止監聽器。 我希望這段代碼有所幫助,我試圖盡可能接近我認為你正在尋找的東西。
代碼:
from pynput import keyboard
from time import sleep
KeyboardOut = keyboard.Controller()
pressed_keys = []
released_keys = []
def on_press(key):
try:
pressed_keys.append(format(key.char))
except AttributeError:
print('special key {0} pressed'.format(
key))
def on_release(key):
if len(pressed_keys) > 0:
released_keys.append(format(key))
test_frame()
return False
if key == keyboard.Key.esc:
# Stop listener
return False
def test_frame():
print('\n\n'+str(pressed_keys))
print('paused')
print('send outputs')
KeyboardOut.press('+')
KeyboardOut.release('+')
pressed_keys.clear()
released_keys.clear()
with keyboard.Listener(
on_press=on_press,
on_release=on_release) as listener:
listener.run()
print('unpaused')
sleep(1)
return True
# Collect events until released
with keyboard.Listener(
on_press=on_press,
on_release=on_release) as listener:
listener.run()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.