如何在画布屏幕上显示提示并删除

时间:2017-03-24 22:21:27

标签: python canvas tkinter timer tkinter-canvas

我目前正在尝试制作一个每天计入特定时间的计划。我已经完成了计时器,但现在我需要提示出现在画布上。如何让秒显示(提示)然后删除并显示下一秒(下一个提示)。非常感谢您的帮助

from datetime import datetime
import threading
import time
from tkinter import *
tk = Tk()
canvas = Canvas(tk, width=400, heihgt=400)
canvas.pack()

selected_date = datetime(2017,3,24,16,16)

def countdown() :
    t = threading.Timer(1.0, countdown).start()
    s = (selected_date - datetime.now()).seconds
    print(s, "seconds until click")
    if s == 0:
    print("CLICK NOW")


countdown()

这是我现在的代码。任何帮助是极大的赞赏。提前谢谢。

1 个答案:

答案 0 :(得分:1)

正如评论中所述,你不应该使用线程(我的猜测是你从this问题得到了想法)和tkinter。您应该使用.after,因为它支持tkinter如何操作。以下是如何使用它的示例(使用您的框架):

from datetime import datetime
from tkinter import *
tk = Tk()
canvas = Canvas(tk, width=400, height=400)
canvas.pack()

selected_date = datetime(2017,3,24,16,16)
time = Label(canvas) # creates a label
time.pack()
def countdown() :
    s = (selected_date - datetime.now()).seconds # calculates the seconds left
    time['text']=str(s) + " seconds until click" # change the text of the label
    if s == 0:
        time.pack_forget() # hide the label when time is up
        clicker = Button(canvas, text="CLICK NOW") # creates a button with the text CLICK ME
        clicker.pack()
        return 
    canvas.after(1000, countdown) # continue till the time is up


canvas.after(1000, countdown) # 1000 ms == 1 second
tk.mainloop()

此示例创建一个标签,按照问题中的要求显示从所选时间到现在的秒数。并创建一个按钮,当时间到了,现在单击“立即点击”。

注意:使用.after时,时间的第一个参数是 ms ,这意味着1000毫秒= 1秒。

另请注意:如果您使用tkinter 并且您正确使用 ,则线程可以工作。但永远不要用tkinter。

相关问题