import math
import tkinter as tk
from datetime import datetime
class ClockApp:
    def __init__(self, root):
        self.root = root
        self.root.title("Python 时钟")
        self.root.geometry("400x400")
        self.root.resizable(False, False)
        self.canvas = tk.Canvas(root, width=400, height=400, bg="white")
        self.canvas.pack()
        self.center_x = 200
        self.center_y = 200
        self.radius = 180
        self.update_clock()
    def draw_clock_face(self):
        """绘制时钟表盘（刻度、数字）"""
        self.canvas.create_oval(
            self.center_x - self.radius,
            self.center_y - self.radius,
            self.center_x + self.radius,
            self.center_y + self.radius,
            width=2
        )
        for hour in range(12):
            angle = math.radians(hour * 30 - 90)
            x1 = self.center_x + self.radius * math.cos(angle)
            y1 = self.center_y + self.radius * math.sin(angle)
            x2 = self.center_x + (self.radius - 20) * math.cos(angle)
            y2 = self.center_y + (self.radius - 20) * math.sin(angle)
            self.canvas.create_line(x1, y1, x2, y2, width=3)
            num_x = self.center_x + (self.radius - 35) * math.cos(angle)
            num_y = self.center_y + (self.radius - 35) * math.sin(angle)
            self.canvas.create_text(num_x, num_y, text=str(hour if hour != 0 else 12), font=("Arial", 16))
        for minute in range(60):
            if minute % 5 != 0:
                angle = math.radians(minute * 6 - 90)  # 6度/分钟
                x1 = self.center_x + self.radius * math.cos(angle)
                y1 = self.center_y + self.radius * math.sin(angle)
                x2 = self.center_x + (self.radius - 10) * math.cos(angle)
                y2 = self.center_y + (self.radius - 10) * math.sin(angle)
                self.canvas.create_line(x1, y1, x2, y2, width=1)
        self.canvas.create_oval(
            self.center_x - 5, self.center_y - 5,
            self.center_x + 5, self.center_y + 5,
            fill="black"
        )
    def draw_hands(self, hour, minute, second):
        """绘制时针、分针、秒针"""
        sec_angle = math.radians(second * 6 - 90)
        min_angle = math.radians((minute + second / 60) * 6 - 90)
        hour_angle = math.radians((hour % 12 + minute / 60) * 30 - 90)
        sec_x = self.center_x + self.radius * 0.9 * math.cos(sec_angle)
        sec_y = self.center_y + self.radius * 0.9 * math.sin(sec_angle)
        self.canvas.create_line(
            self.center_x, self.center_y, sec_x, sec_y,
            fill="red", width=1
        )
        min_x = self.center_x + self.radius * 0.75 * math.cos(min_angle)
        min_y = self.center_y + self.radius * 0.75 * math.sin(min_angle)
        self.canvas.create_line(
            self.center_x, self.center_y, min_x, min_y,
            fill="blue", width=2
        )
        hour_x = self.center_x + self.radius * 0.6 * math.cos(hour_angle)
        hour_y = self.center_y + self.radius * 0.6 * math.sin(hour_angle)
        self.canvas.create_line(
            self.center_x, self.center_y, hour_x, hour_y,
            fill="black", width=4
        )
    def update_clock(self):
        """更新时钟（每秒刷新一次）"""
        self.canvas.delete("all")
        now = datetime.now()
        hour = now.hour
        minute = now.minute
        second = now.second
        self.draw_clock_face()
        self.draw_hands(hour, minute, second)
        time_text = now.strftime("%H:%M:%S")
        self.canvas.create_text(
            self.center_x, self.center_y + self.radius + 20,
            text=time_text, font=("Arial", 14)
        )
        self.root.after(1000, self.update_clock)
if (__name__ == '__main__'):
    #创建主窗口并运行
    root = tk.Tk()
    app = ClockApp(root)
    root.mainloop()