如何在20分钟时停止计时器
问题描述:
我正在制作一个计时器,当用户点击“空格”并停在“p”时停止显示结束时间。我可以在20分钟的最长时间停下来吗?有什么样如何在20分钟时停止计时器
if time_passed==20:
break
我的代码:
from turtle import*
from datetime import datetime
...
def start():
undo()
global break1, timerint, startime
break1 = 0
startime = datetime.now()
while True:
timerint = datetime.now()-startime
write(timerint,font=("Arial",50))
undo()
if break1 == 1:
break
def stop():
global break1, timerint, startime
timerint=datetime.now()-startime
write(timerint,font=("Arial",50))
break1 = 1
# Turtle placement code removed
onkeypress(start,"space")
onkeypress(stop,"p")
listen()
答
没有,但你可以随时检查经过的时间用了time.time()方法。
import time
start = time.time()
while ...
....
now = time.time()
if now - start > 20 * 60:
break
这是低科技版本。如果你想要更复杂的东西,比如单独的定时器进程,可以尝试一个完整的浏览器搜索“Python定时器进程”。
此外,您可以考虑使用布尔值:
global timer_running, timerint, startime
timer_running = True
startime = datetime.now()
while timer_running:
timerint = datetime.now()-startime
write(timerint,font=("Arial",50))
undo()
def stop():
global timer_running, timerint, startime
timerint = datetime.now()-startime
write(timerint, font=("Arial", 50))
timer_running = False
答
我建议摆脱while
循环的,而是建立在海龟的ontimer()
事件:
from turtle import Turtle, Screen
from datetime import datetime
FONT = ("Arial", 50)
def start():
global timer_running, start_time
if timer_running:
return
start_time = datetime.now()
timer_running = True
screen.ontimer(lambda time=start_time: automatic_stop(time), 20 * 60 * 1000)
screen.ontimer(update, 100)
def update():
if not timer_running:
return
timerint = datetime.now() - start_time
marker.undo()
marker.write(timerint, align='center', font=FONT)
screen.ontimer(update, 100)
def manual_stop():
global timer_running
if not timer_running:
return
timer_running = False
timerint = datetime.now() - start_time
marker.undo()
marker.write(timerint, align='center', font=FONT)
def automatic_stop(time):
global timer_running
if timer_running and start_time == time: # make sure *this* timer is still valid
timer_running = False
marker.undo()
marker.write("Expired!", align='center', font=FONT)
screen = Screen()
marker = Turtle(visible=False)
marker.penup()
marker.write("Hit 'space' to start timer; 'p' to stop", align='center', font=FONT)
start_time = None
timer_running = False
screen.onkeypress(start, "space")
screen.onkeypress(manual_stop, "p")
screen.listen()
screen.mainloop()
我们通过automatic_stop()
一个start_time
的副本,以便在遥远的将来它醒来时它可以检查它是否仍然是有效的结束事件或不是基础的编辑当前start_time
。 (如果你在Tk级别工作而不是乌龟,则可能可以在不再需要时取消定时器。)
欢迎来到StackOverflow。请阅读并遵守帮助文档中的发布准则。 [在主题](http://stackoverflow.com/help/on-topic)和[如何提问](http://stackoverflow.com/help/how-to-ask)适用于此处。 StackOverflow不是一个设计,编码,研究或教程服务。有多种Python定时器可供使用;你在研究前的研究中怎么没有找到它们? – Prune
那有什么好玩的? – Xero0