所以我正在制作一个有定时器的程序,定时器工作,现在我正在使用暂停功能。经过一些研究,我发现了一个在取消后调用的函数。这个函数应该取消after函数,因为在这种情况下,after函数会创建一个无限循环。在这种情况下,我如何正确使用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_cancel
脚本可以通过使用if
语句来避免。例如,看看这个:我修改了您的代码以显示
t
,而没有使用mm:ss
格式。主要的一点是,如果timerState
是False
,那么timerLabel.after(1, countdown)
将永远不会被调用,因此没有必要使用.after_cancel
注意:您没有考虑其他代码所花费的时间,因此
t
实际上不是以毫秒为单位的(至少对于我速度较慢的计算机来说是这样)下面是
after
和after_cancel
的演示需要取消每个
after
以清除事件队列在该程序中,每次按下按钮都会生成一个延时事件。 事件ID存储在
self.after_time
为了演示,我将延迟值设置为每按一次按钮增加100毫秒。 它从视图中撤回主控形状
当时间延迟事件完成时,它调用
self.action
self.action
使用after_cancel( self.after_time )
取消事件 主屏幕显示,为下一次按钮按下做好准备相关问题 更多 >
编程相关推荐