2017-06-22 175 views
-1

我正在制作一个计时器,当用户点击“空格”并停在“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() 
+0

欢迎来到StackOverflow。请阅读并遵守帮助文档中的发布准则。 [在主题](http://stackoverflow.com/help/on-topic)和[如何提问](http://stackoverflow.com/help/how-to-ask)适用于此处。 StackOverflow不是一个设计,编码,研究或教程服务。有多种Python定时器可供使用;你在研究前的研究中怎么没有找到它们? – Prune

+1

那有什么好玩的? – Xero0

回答

2

没有,但你可以随时检查经过的时间用了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 
0

我建议摆脱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级别工作而不是乌龟,则可能可以在不再需要时取消定时器。)