我正在尝试编写一个使用time.sleep()
的程序我想启动程序并让项目不断移动(这部分我已经排序)。
然后我希望程序在指定的时间段内“睡眠”(1分钟,2分钟,5分钟,10分钟)
在这个“睡眠”期间,如果有人按下连接到设备的按钮,那么一切都会停止移动。
如果他们在指定的时间后按下按钮,那么一切都很顺利。
是否有可能在time.sleep()中发生这种情况,还是有其他更好的方式?
答案 0 :(得分:1)
您不需要time.sleep()
,并且您不需要紧密循环(或任何类型的循环)来检查时钟。您需要做的就是在开始时设置一个标志,然后使用after
消息在所需时间后清除标志。然后,你的按钮功能只需要检查标志,看它是否可以做任何需要做的事情。
例如:
...
b = tk.Button(..., command=self.pause)
def pause(self):
if self.is_sleeping:
self.pause()
...
self.is_sleeping = True
self.after(sleep_period, lambda: self.is_sleeping = False)
self.start_animation()
答案 1 :(得分:0)
不要使用sleep
- 它没用。
您可以使用时钟并检查是否该做某些事情 - 这并不理想。
不理想的伪代码:
time_to_wake_up = current_time + 10 minutes
pause = False # move objects
while True:
if time_to_wake_up > current_time:
if button_was_press:
if not pause:
pause = True
time_to_next_button_press = current_time + 2 minutes
else current_time > time_to_next_button_press:
pause = False
check_events_and_run_other_stuff
if not pause:
change_objects_position
draw_everything
你有主循环去做所有事情,你决定现在应该做些什么。
这并不理想 - 也许有更好的解决方案。