【发布时间】:2021-09-18 18:52:34
【问题描述】:
所以我正在制作一个有计时器的程序并且计时器工作,现在我正在使用暂停功能。经过一番研究,我发现了一个名为 after_cancel 的函数。这个函数应该取消后函数,因为在这种情况下后函数会创建一个无限循环。在这种情况下如何正确使用 after_cancel 还是有其他可能的解决方案?
提前致谢。
t = 60000
global timerState
timerState = True
def pause():
timerLabel.after_cancel(countdown)
timerState = False
timerButton.config(text="Play", command=countdown)
def countdown():
global t
if t == 0:
timer = "00:00"
timerLabel.config(text=timer)
return
if timerState == False:
timerLabel.after_cancel(countdown)
timerButton.config(text="Play", command=countdown)
return
mins = t / 60000
secs = t / 1000
secs = secs - int(mins) * 60
mills = t
mills = mills - int(secs) * 1000
if timerState == True:
timer = "{:02d}:{:02d}".format(int(mins),int(secs))
timerLabel.config(text=timer)
t -= 1
timerLabel.after(1, countdown)
timerButton.config(text="Pause", command=pause)
【问题讨论】:
-
您需要将
.after()返回的ID传递给.after_cancel()。例如:after_id = timerLabel.after(1, countdown),然后是timerLabel.after_cancel(after_id)。您可能需要将after_id设为全局变量。 -
好的,那么我如何获得 after id?
-
我已经在评论中提到了。
-
哦,现在我明白了,对不起,我有点糊涂了。谢谢!