python - 如何在python中为某个时间和日期制作倒数计时器?
问题描述
我正在为下一次使用 python 和 tkinter 发射 spacex 的倒数计时器工作。计时器应该在 2020 年 5 月 30 日 22:30 CEST 结束。我希望它每秒更新一次 HOURS:MINUTES:SECONDS。我试过了,但我能想到的就是这个,它仍然给我一个错误。
import tkinter as tk
from datetime import datetime
import time
HEIGHT = 250
WIDTH = 1000
def timer():
spacex = datetime(2020, 5, 30, 22 - 1, 30, 0).timestamp()
dif = spacex - time.time()
# H:M:S
while (dif >= 0):
dif = spacex - time.time()
textline = str(dif // 3600)[:2] + ":" + str((dif // 60) % 60)[:2] + ":" + str((dif // 1) % 60[:2]
time.sleep(1)
v = str(textline)
label["text"] = v
# TKINTER BELOW
root = tk.Tk()
canvas = tk.Canvas(root, height=HEIGHT, width=WIDTH)
canvas.pack()
frame = tk.Frame(root, bg="#808080", bd=20)
frame.place(relwidth=0.6, relheight=0.4, relx=0.2, rely=0.25)
button = tk.Button(root, text="See timer!", font="Arial", command=lambda: timer())
button.place(relheight=0.1, relwidth=0.1)
label = tk.Label(frame, font="Arial")
label.place(relwidth=1, relheight=1)
root.mainloop()
解决方案
直接错误是str()
此行缺少右括号:
... + str((dif // 1) % 60[:2]
但是,当我们这样做的时候,让我们使用 tkinter 自己的计时机制而不是循环 and sleep()
,并使用 Python 提供的时间格式化函数。并提高字体大小:
import tkinter as tk
from datetime import datetime
import time
WIDTH, HEIGHT = 1000, 250
def timer():
space_x = datetime(2020, 5, 30, 22 - 1, 30, 0).timestamp()
delta = space_x - time.time()
if delta >= 0:
label["text"] = time.strftime("%d day(s), %H:%M:%S", time.localtime(delta))
root.after(1000, timer)
root = tk.Tk()
canvas = tk.Canvas(root, height=HEIGHT, width=WIDTH)
canvas.pack()
frame = tk.Frame(root, bg="#808080", bd=20)
frame.place(relwidth=0.6, relheight=0.4, relx=0.2, rely=0.25)
button = tk.Button(root, text="See timer!", font="Arial", command=timer)
button.place(relheight=0.1, relwidth=0.1)
label = tk.Label(frame, font=("Arial", "24", "bold"))
label.place(relwidth=1, relheight=1)
root.mainloop()
使用strftime()
这种方式只能在一个月前使用。
推荐阅读
- c# - 如何使用通用类型和 lambda 构造和编译此 C# 表达式
- javascript - Type Void is Not Assignable to Type Boolean (React/Typescript)
- ios - iOS Firebase -When Fanning -'InvalidPathValidation',原因:'(child:) 必须是非空字符串且不包含'。' '#' '$' '[' 或 ']''
- typescript - 为什么这个包装函数不拾取函数重载(打字稿)?
- c# - 为什么从 uint 中减去 int.MaxValue 与从 uint 中减去 int 类型变量不同?
- dask - 无法使用 aws-fargate ecs 加载大文件
- gradle-kotlin-dsl - How do you add local .jar file dependency to build.gradle.kt file?
- python - 如何从 txt 文件中读取字典列表
- javascript - 创建了一个 React Native 应用程序,但它在 6 英寸屏幕上看起来不错,但在 4.3 英寸屏幕上不好看
- mysql - Yii 1.1 model relation can't use joined table column on select