2017-06-22 14 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。ヘルプドキュメントの投稿ガイドラインを読み、それに従ってください。 [on topic](http://stackoverflow.com/help/on-topic)および[How to Ask](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 timer process"のフルブラウザで検索してみてください。

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

私は亀のontimer()イベント時にwhileループを取り除き、代わりに建てる取得をお勧めします:

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レベルで作業している場合は、もはや必要がなくなったときにタイマーをキャンセルすることができます)。

関連する問題