我目前正在尝试制作一个每天计入特定时间的计划。我已经完成了计时器,但现在我需要提示出现在画布上。如何让秒显示(提示)然后删除并显示下一秒(下一个提示)。非常感谢您的帮助
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()
这是我现在的代码。任何帮助是极大的赞赏。提前谢谢。
答案 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。