时钟是我们日常生活中最常见的也是必不可少的东西,你有没有想过用 Python 来画一个实时动态的时钟呢?下面我们来看看如何使用简单的代码实现一个动态时钟吧!
主要使用tkinter库: 这是Python的标准GUI(图形用户界面)库,用于创建和管理图形界面。通过tkinter,我们可以轻松地创建窗口、按钮、文本框等各种GUI元素。
time库:提供了各种时间相关的功能,来获取当前的系统时间。
来看看实现结果:
源码如下:
import tkinter as tk
import time
import math
root = tk.Tk()
root.title("万能数字钟")
canvas = tk.Canvas(root, width=400, height=400, bg="white")
canvas.pack()
canvas.create_oval(50, 50, 350, 350, width=2, outline="black", fill="lightgray")
for i in range(1, 13):
angle = math.radians(30 * i - 90)
x = 200 + 100 * math.cos(angle)
y = 200 + 100 * math.sin(angle)
canvas.create_text(x, y, text=str(i), font=('calibri', 12, 'bold'))
time_label = tk.Label(root, font=('calibri', 14, 'bold'), bg='white')
time_label.pack()
def update_time():
current_time = time.strftime("%H:%M:%S")
time_label.config(text=current_time)
root.after(1000, update_time)
update_clock()
def update_date():
current_date = time.strftime("%Y-%m-%d %A")
date_label.config(text=current_date)
date_label.after(60000, update_date)
date_label = tk.Label(root, font=('calibri', 10, 'bold'), bg='white')
date_label.pack()
def update_clock():
current_time = time.localtime()
second_angle = current_time.tm_sec * 6
minute_angle = current_time.tm_min * 6 + current_time.tm_sec * 0.1
hour_angle = (current_time.tm_hour % 12) * 30 + current_time.tm_min * 0.5
canvas.delete("hands")
hour_x = 200 + 60 * math.cos(math.radians(90 - hour_angle))
hour_y = 200 - 60 * math.sin(math.radians(90 - hour_angle))
canvas.create_line(200, 200, hour_x, hour_y, width=6, fill="darkblue", tags="hands")
minute_x = 200 + 80 * math.cos(math.radians(90 - minute_angle))
minute_y = 200 - 80 * math.sin(math.radians(90 - minute_angle))
canvas.create_line(200, 200, minute_x, minute_y, width=4, fill="darkgreen", tags="hands")
second_x = 200 + 90 * math.cos(math.radians(90 - second_angle))
second_y = 200 - 90 * math.sin(math.radians(90 - second_angle))
canvas.create_line(200, 200, second_x, second_y, width=2, fill="red", tags="hands")
root.after(1000, update_clock)
update_time()
update_date()
update_clock()
root.mainloop()