簡體   English   中英

在python中創建一個帶有暫停功能的計時器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM