[英]Creating a timer with a pause function in python
有人幫助我制作了一個計時器,如果我按空格鍵,它會重新啟動。 我想編輯此代碼,以便當我按下返回/輸入按鈕時,它會暫停計時器,無論計時器在哪里(重新啟動、0 或中間)。 當然,我不希望它影響其余的代碼。 這是我的代碼:
from turtle import Screen, Turtle, bgcolor
bgcolor('dodgerblue')
FONT = ("Arial", 60, "normal")
strings = input("Please enter the time: ").strip().split(' ')
time = [60 ** (len(strings) - index - 1) * int(unit) for index, unit in enumerate(strings)]
seconds = -1
ticking = False
def delSec(string):
if len(string)==1:
return "0"+string
else:
return string
def tick():
global seconds, ticking
turtle.clear()
if seconds < 0:
turtle.write("TIMER DONE", align='center', font=FONT)
ticking = False
else:
turtle.write(delSec(str(seconds//3600))+":"+delSec(str((seconds%3600)//60))+":"+delSec(str((seconds%60)//1)), align='center', font=FONT)
seconds -= 1
screen.ontimer(tick, 1000)
key = "space"
def reset():
global seconds, ticking, key
screen.onkey(None, key) # Disable event handler inside handler
seconds = sum(time)
if not ticking:
ticking = True
tick()
screen.onkey(reset, key) # Reenable event handler
screen = Screen()
turtle = Turtle()
turtle.hideturtle()
turtle.color('white')
reset()
screen.listen()
screen.mainloop()
我將不勝感激任何幫助,在此先感謝!
編輯:我想要這樣,如果計時器暫停,我仍然可以重置它。
我使用鍵Return
運行更改paused
功能
def pause():
global paused
paused = not paused
並使用這個paused
來控制tick()
def tick():
global seconds, ticking
if not paused:
turtle.clear()
if seconds < 0:
turtle.write("TIMER DONE", align='center', font=FONT)
ticking = False
return
else:
turtle.write(delSec(str(seconds//3600))+":"+delSec(str((seconds%3600)//60))+":"+delSec(str((seconds%60)//1)), align='center', font=FONT)
seconds -= 1
screen.ontimer(tick, 1000)
即使暫停, tick()
也必須運行ontimer()
from turtle import Screen, Turtle, bgcolor
# --- functions ---
def delSec(string):
if len(string) == 1:
return "0" + string
else:
return string
def tick():
global seconds, ticking
if not paused:
turtle.clear()
if seconds < 0:
turtle.write("TIMER DONE", align='center', font=FONT)
ticking = False
return
else:
turtle.write(delSec(str(seconds//3600))+":"+delSec(str((seconds%3600)//60))+":"+delSec(str((seconds%60)//1)), align='center', font=FONT)
seconds -= 1
screen.ontimer(tick, 1000)
def reset():
global seconds, ticking, key,
#global paused
screen.onkey(None, key) # Disable event handler inside handler
screen.onkey(None, key_pause) # Disable event handler inside handler
seconds = sum(time)
if not ticking:
ticking = True
tick()
#paused = False
screen.onkey(reset, key) # Reenable event handler
screen.onkey(pause, key_pause) # Reenable event handler
def pause():
global paused
paused = not paused
# --- main ---
bgcolor('dodgerblue')
FONT = ("Arial", 60, "normal")
#strings = input("Please enter the time: ").strip().split(' ')
strings = '10'.strip().split(' ')
time = [60 ** (len(strings) - index - 1) * int(unit) for index, unit in enumerate(strings)]
seconds = -1
ticking = False
paused = False
key = "space"
key_pause = "Return"
screen = Screen()
turtle = Turtle()
turtle.hideturtle()
turtle.color('white')
reset()
screen.listen()
screen.mainloop()
即使在暫停時也要重置文本,我只暫停seconds -= 1
- 所以它會在每個循環中重繪時間 - 即使它暫停 - 所以重置可以改變值。
def tick():
global seconds, ticking
turtle.clear()
if seconds < 0:
turtle.write("TIMER DONE", align='center', font=FONT)
ticking = False
return
else:
turtle.write(delSec(str(seconds//3600))+":"+delSec(str((seconds%3600)//60))+":"+delSec(str((seconds%60)//1)), align='center', font=FONT)
if not paused:
seconds -= 1
screen.ontimer(tick, 1000)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.