你可以在使用time.sleep()时在python中做其他任务吗?

时间:2013-11-21 04:08:42

标签: python tkinter

我正在尝试编写一个使用time.sleep()

的程序

我想启动程序并让项目不断移动(这部分我已经排序)。

然后我希望程序在指定的时间段内“睡眠”(1分钟,2分钟,5分钟,10分钟)

在这个“睡眠”期间,如果有人按下连接到设备的按钮,那么一切都会停止移动。

如果他们在指定的时间后按下按钮,那么一切都很顺利。

是否有可能在time.sleep()中发生这种情况,还是有其他更好的方式?

2 个答案:

答案 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

你有主循环去做所有事情,你决定现在应该做些什么。

这并不理想 - 也许有更好的解决方案。