gpt4 book ai didi

python - 在python中创建一个带有暂停函数的计时器

转载 作者:行者123 更新时间:2023-12-01 06:23:17 27 4
gpt4 key购买 nike

有人帮助我制作了一个计时器,如果我按空格键,它就会重新启动。我想编辑此代码,以便当我按下返回/输入按钮时,它会暂停计时器,无论计时器位于何处(重新启动、在 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()
<小时/>

要重置文本,即使它暂停,我也只暂停秒 -= 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)

关于python - 在python中创建一个带有暂停函数的计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60272123/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com