我一直在开发一个程序,该程序检测按下“enter”的次数,问题是当变量达到某个值时,应该中断函数的 elif/if 条件会不断计算次数已按下“enter”而不是中断该功能。
from pynput import keyboard
keystroke = 0
def on_release(key):
print(key)
global keystroke
if key == keyboard.Key.enter:
keystroke += 1 #this sums to the variable keystroke +1.
print(keystroke)
elif keystroke > 3: #This intends to break the fuction when keystroke reaches or surpasses 3.
return False
with keyboard.Listener( #Calling the function here.
on_press=on_press,
on_release=on_release) as listener:
listener.join()
......
这是输出。
Output
key.enter
1
key.enter
2
key.enter
3
key.enter
4
....
该代码的问题在于,你的
elif
语句位于
if key == keyboard.Key.enter
语句的内部。这意味着仅当第一个条件 (
key == keyboard.Key.enter
) 为假时,才会评估
elif
条件。换句话说,只有在未按 Enter 键的情况下,才会检查
keystroke
是否大于 3。
若要解决此问题,你需要将
elif
语句移出
if
语句,使其始终得到评估。以下是一个更新的代码版本:
from pynput import keyboard
keystroke = 0
def on_release(key):
global keystroke
if key == keyboard.Key.enter:
keystroke += 1
print(keystroke)
# 将 elif 移出 if 语句
if keystroke > 3:
print("Keystroke limit reached. Stopping listener...")
return False
with keyboard.Listener(
on_press=None,
on_release=on_release) as listener:
listener.join()
print("Listener stopped.")
在此版本中,每次按下按键时都会检查
if keystroke > 3
条件。如果
keystroke
大于 3,则该函数返回
False
,这将停止监听器。