3

キャンバスに印刷されたカウントダウン タイマー テキストの更新に問題があります。私の現在のコードは、テキストが空白であるべき領域を残しています。

いろいろなところに置いてみましたが、どれも効果がないか、上記と同じ効果になります。関数を削除する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))

また、別の画面をロードするキャンバスの終了ボタンを押した場合、タイマーを途中で終了するにはどうすればよいですか? 現在、別の画面をロードしてもタイマーは継続します。

4

1 に答える 1

3

タイマーをキャンセルするには。の戻り値を保存し、保存した値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()
于 2013-07-12T03:16:22.673 に答える