我在更新画布上打印的倒数计时器文字时遇到了一些麻烦。我当前的代码离开了文本应为空白的区域。
我尝试将它放在不同的地方,但它们都没有导致我上面描述的效果或效果。删除canvas.delete
功能只会导致新的时间写在旧的上面。
这是我目前的代码:
def cdtimerr():
global cdtimer
cdtimer -= 1
cdtext = canvas.create_text(510, 6, text=cdtimer, font="Ubuntu 29 bold", anchor = NW)
if cdtimer == 0 :
canvas.delete(ALL)
scorescreen()
else:
canvas.after(1000, cdtimerr)
canvas.after(1000, canvas.delete(cdtext))
另外,如果按下画布上的退出按钮加载另一个屏幕,我将如何过早地终止定时器?目前,如果我加载另一个屏幕,计时器仍然会继续。
答案 0 :(得分:2)
取消计时器。保存after
的返回值,使用保存的值调用after_cancel
。
from Tkinter import *
remain = 11
_timer = None
def cdtimerr():
global remain, _timer
remain -= 1
cdtext = canvas.create_text(510, 6, text=remain, font="Ubuntu 29 bold", anchor=NW)
if remain == 0:
canvas.delete(ALL)
else:
_timer = canvas.after(1000, lambda: (canvas.delete(cdtext), cdtimerr()))
root = Tk()
root.geometry('1024x768')
canvas = Canvas(root)
canvas.pack(expand=1, fill=BOTH)
_timer = canvas.after(0, cdtimerr)
Button(root, text='Cancel', command=lambda: canvas.after_cancel(_timer)).pack()
root.mainloop()