|
| 1 | +import tkinter as tk |
| 2 | +from math import sin, cos, pi |
| 3 | + |
| 4 | +def update_clock(): |
| 5 | + current_time = time_var.get() |
| 6 | + seconds = current_time % 60 |
| 7 | + minutes = (current_time // 60) % 60 |
| 8 | + hours = (current_time // 3600) % 12 |
| 9 | + |
| 10 | + # Calculation of the angles for the clock hands (in degrees) |
| 11 | + seconds_angle = 90 - seconds * 6 |
| 12 | + minutes_angle = 90 - minutes * 6 - seconds * 0.1 |
| 13 | + hours_angle = 90 - (hours * 30 + minutes * 0.5) |
| 14 | + |
| 15 | + canvas.delete("all") #Deletes all previous drawings |
| 16 | + |
| 17 | + canvas.create_oval(50, 50, 250, 250) #To draw clock face |
| 18 | + |
| 19 | + for i in range(1, 13): # Drawing clock numbers |
| 20 | + angle = 90 - i * 30 #Calculation of the angle for each number |
| 21 | + x = 150 + 85 * cos(angle * (pi / 180)) |
| 22 | + y = 150 - 85 * sin(angle * (pi / 180)) |
| 23 | + canvas.create_text(x, y, text=str(i), font=("Arial", 12, "bold")) |
| 24 | + |
| 25 | + draw_hand(150, 150, seconds_angle, 80, 1) |
| 26 | + draw_hand(150, 150, minutes_angle, 70, 2) |
| 27 | + draw_hand(150, 150, hours_angle, 50, 4) |
| 28 | + |
| 29 | + time_var.set(current_time + 1) # Updating the time |
| 30 | + |
| 31 | + root.after(1000, update_clock) # Updating the clock every 1000ms (1 second) |
| 32 | + |
| 33 | +def draw_hand(x, y, angle, length, width): |
| 34 | + radian_angle = angle * (pi / 180) |
| 35 | + end_x = x + length * cos(radian_angle) |
| 36 | + end_y = y - length * sin(radian_angle) |
| 37 | + canvas.create_line(x, y, end_x, end_y, width=width) |
| 38 | + |
| 39 | +root = tk.Tk() # Creating the main window |
| 40 | +root.title("Analog Clock") |
| 41 | + |
| 42 | +canvas = tk.Canvas(root, width=350, height=350) |
| 43 | +canvas.pack() |
| 44 | + |
| 45 | +time_var = tk.IntVar() |
| 46 | +time_var.set(10 * 3600) |
| 47 | + |
| 48 | +update_clock() # Starting the clock update function |
| 49 | +root.mainloop() # Running the Tkinter main loop |
| 50 | + |
0 commit comments