[英]While loop doesn't stop when key is pressed - python
我的 python 代码每 4 秒在屏幕上点击一次,但在按下 q 时停止(一次),再次按下 q 时它继续。
我也用 break 尝试了这个,而不是不点击,但它只在我按住 q 一段时间并且我必须再次运行代码才能再次开始点击时才有效......
有谁知道我如何不必按住钥匙以及如何防止许多输入?
import time
import pyautogui
import keyboard
time.sleep(5)
click = True
print(click)
while click:
if keyboard.is_pressed("q"):
print(click)
click = not click
time.sleep(4)
if click:
pyautogui.click()
编辑:@stacker 的答案有效,但它不会每 4 秒点击一次......
那是我的第一个代码,但我希望它每 4 秒按下一次,然后它们就会出现问题......
import time
import pyautogui
import keyboard
time.sleep(5)
should_loop = True
click = True;
while should_loop:
if keyboard.is_pressed("q"):
print("Stopped/Started clicking!")
click = not click
time.sleep(1) # sleep for 1 second so the button doesnt get tapped
# again too fast
if click:
time.sleep(4) # sleep 4 seconds before clicking
print("Clicked!")
pyautogui.click()
当您按下 q 时,您将退出while click:循环,只需添加一个新的 bool 即可解决此问题。 Output:
qStopped/Started clicking!
Clicked!
Clicked!
...
Clicked!
Clicked!
qStopped/Started clicking!
这里的问题是睡眠延迟。 当 time.sleep function 正在执行时,您无法记录任何键盘事件,因为它完全阻止了代码。 即使在睡眠延迟期间,您也希望能够读取键盘事件。 解决方法很简单。 只需制作自己的睡眠代码即可。
import time
import pyautogui
import keyboard
time.sleep(5)
click = True
print(click)
while click:
expected_continue_time = time.time() + 4
while time.time() < expected_continue_time:
if keyboard.is_pressed("q"):
print(click)
click = not click
break
if click:
pyautogui.click()
time.time()
function 返回 Unix 时间。 我们在 UNIX 时间加上 4 秒所需的延迟时间,并找出脚本在延迟 4 秒后何时继续执行。 在时间达到 4 秒限制之前,它会一直检查按键。
但当 q 被按下(一次)时它会停止,当 q 再次被按下时它会继续。
作为旁注,请注意您在按键上修改的变量是运行 while 循环的变量。 因此,如果它设置为 False,您的循环就会结束。 如果你希望它是连续的,你应该为循环创建一个单独的变量,或者只是运行一个无限循环。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.