Python在Tkinter中覆盖文本

Python在Tkinter中覆盖文本,python,tkinter,overwrite,tkinter-canvas,Python,Tkinter,Overwrite,Tkinter Canvas,更新画布上打印的倒计时计时器文本时遇到问题。我当前的代码保留了文本应该为空的区域 我试着把它放在不同的地方,但它们都没有效果,或者与我上面描述的效果相同。删除canvas.delete函数只会导致在旧时间的基础上写入新时间 这是我目前的代码: def cdtimerr(): global cdtimer cdtimer -= 1 cdtext = canvas.create_text(510, 6, text=cdtimer, font="Ubuntu 29 bold",

更新画布上打印的倒计时计时器文本时遇到问题。我当前的代码保留了文本应该为空的区域

我试着把它放在不同的地方,但它们都没有效果,或者与我上面描述的效果相同。删除
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))

另外,如果我按下画布上加载另一个屏幕的退出按钮,我将如何提前终止计时器?当前,如果我加载另一个屏幕,计时器仍将继续。

取消计时器。在之后保存
的返回值,在_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()

感谢您的回答,我们能够使它在程序中完美工作。您的缩进在代码示例中被弄乱了。所有这些代码都是cdtimer的一部分吗,或者其中的一部分是全局范围的吗?我想在我把它复制到我的问题中之后,它就搞砸了,因为它缩进正确并且在pydev中工作。。但现在已修复,以前没有注意到。