我希望在使用相同的键退出操作后,通过按键重新启动while循环。基本上,我正在寻找可以通过按键打开和关闭的while循环。到目前为止,我的代码仅通过按键即可停止循环,但是我不知道如何再次启动循环。
import keyboard
from time import sleep
key = "right shift"
while True:
print("Running")
sleep(0.5)
if keyboard.is_pressed(key):
break
我会描述我在这里尝试过的事情,但老实说我不知道。
编辑:很抱歉,我一开始不清楚,但这就是我想要的:
如果您希望循环重新开始,请再放置一个while循环 当前的那一行,并在其中一行中等待一行 在进入内循环之前先按下键。
我已经完成了凯尔(Kyle)建议的工作,并且工作得很好,除了您必须按住钥匙才能使其停止。我相信可以通过时间来解决问题,这是我到目前为止的事情:
import keyboard
from time import sleep
key = "right shift"
while True:
if keyboard.is_pressed(key):
while True:
print("Running")
sleep(0.5)
if keyboard.is_pressed(key):
sleep(1)
break
答案 0 :(得分:2)
keyboard
模块具有更多功能,允许使用不同的挂钩/阻止程序。
只需使用keyboard.wait(key)
来阻止控制流,直到按下key
:
import keyboard
from time import sleep
key = "right shift"
while True:
print("Running")
sleep(0.5)
if keyboard.is_pressed(key):
print('waiting for `shift` press ...')
keyboard.wait(key)
示例交互式输出:
Running
Running
Running
waiting for `shift` press ...
Running
Running
Running
Running
Running
waiting for `shift` press ...
Running
Running
Running
...
答案 1 :(得分:1)
如果我正确理解了您的问题,则希望运行while循环,直到用户按下该键,然后再中断代码中的其他操作,直到再次按下该键为止。
一个选择是注册一个键盘事件处理程序,以便无论何时您在脚本中的任何位置(只要它仍在运行),只要您按下某个键,都将调用某些处理程序函数。
然后将while循环放入函数中,并让键盘事件处理程序调用该函数。该功能应首先禁用/注销事件处理程序,然后在退出前立即重新注册。这样,该函数在运行时不会再次调用,但是在完成后将再次响应。
如果只想暂停循环,则可以在if块中放置另一个while循环,该循环等待键被按下后才允许外部循环继续。
如果您希望循环重新开始,则在当前循环周围放置另一个while循环,并在该循环中放入一行,等待键按下,然后移至内部循环。
编辑:由于看起来您想要中间一个,因此下面的示例基本上使用了您已经在使用的技术:
import keyboard
from time import sleep
key = "right shift"
while True:
print("Running")
sleep(0.5)
if keyboard.is_pressed(key):
# May need a delay here to prevent it from immediately continuing
while True: # Will stop the loop until you press again
# Definitely put a delay here. Your CPU will thank you
if keyboard.is_pressed(key): # Check if key is pressed again
break; # Get out of inner loop
continue # Go back to beginning of outer loop
# The continue is optional if this is the end of the loop
编辑2:最后一个示例(尽管如果在我给的第一个示例中包含continue
,也会产生类似的效果)
import keyboard
from time import sleep
key = "right shift"
while True:
while True:
print("Running")
sleep(0.5)
if keyboard.is_pressed(key):
break # Gets you out of the original loop
# Put this at the end of the inner loop
# if you don't want to have to hit the key to start
while True: # Will stop the loop until you press again
# Definitely put a delay here. Your CPU will thank you
if keyboard.is_pressed(key): # Check if key is pressed again
break; # Get out of inner loop
答案 2 :(得分:1)
执行此操作的一种方法是设置一个标志:
go = True
while True:
if go:
print('Running...')
sleep(0.5)
if keyboard.is_pressed(key):
go = not go
但是,这不是编写此类代码的好方法,因为您的程序可以完全控制处理器。当go
为False
时,这称为“忙等待”。相反,您应该了解凯尔在其回答中描述的事件处理。