#2024 ixkakaw. This is a analog world clock script that works by timezones. import tkinter as tk import time import math from datetime import datetime from pytz import timezone import sys from tkinter import * W = 146 # oval position makes outline of oval to dissapear. Adjusted by subtracting one unit from W and H H = 146 # height and width of each clock oval. CH = 150 # height and width of each clock oval. CW = 150 PX = 7 # x padding of each canvas. PY = 7 color = "#212121" #background color root = tk.Tk() #initiates main window root.title("Analog World Clocks") #window title root.config(bg = color) #window color canvas_vienna = Canvas(root, width=CW, height=CH, bg=color, #creates single canvas for each clock to be used for the_clock function. bd=0, highlightthickness=0 disables canvas border. relief='flat', bd=0, highlightthickness=0) canvas_guatemala = Canvas(root, width=CW, height=CH, bg=color, relief='flat', bd=0, highlightthickness=0) canvas_montevideo = Canvas(root, width=CW, height=CH, bg=color, relief='flat', bd=0, highlightthickness=0) canvas_calcutta = Canvas(root, width=CW, height=CH, bg=color, relief='flat', bd=0, highlightthickness=0) canvas_kamchatka = Canvas(root, width=CW, height=CH, bg=color, relief='flat', bd=0, highlightthickness=0) def the_clock(region, city, canvas, C): canvas.grid(row = 0, column = C, padx = PX, pady = PY) #constructs the grid so that clocks are aligned in single row canvas.delete("all") #deletes the animation of arrows with each iteration datetime.now(timezone(region)).time() #obtains the time according to region x = datetime.now(timezone(region)).hour y = datetime.now(timezone(region)).minute z = datetime.now(timezone(region)).second hour = x %12 minute = y second = z canvas.create_oval(2, 2, H, W, outline="#0D7377", width=0.5, fill = '#323232') #draws cirle enclosing clock canvas.create_text(CH/2, CW/2, text=str(city), fill= "#14FFEC", font=("Helvetica 13 bold")) #prints text of city inside each clock for i in range(12): #draws the numbers angle = i * math.pi/6 - math.pi/2 x = (W)/2 + 0.8 * (W)/2 * math.cos(angle) y = (H)/2 + 0.8 * (H)/2 * math.sin(angle) if i == 0: canvas.create_text(x, y, text=str(i+12), fill = "#FBFF64", font=("helvetica", 9)) else: canvas.create_text(x, y, text=str(i), fill="#FBFF64", font=("helvetica", 9)) hour_angle = (hour + minute/60) * math.pi/6 - math.pi/2 #draws hours' hand hour_x = W/2 + 0.5 * W/2 * math.cos(hour_angle) hour_y = H/2 + 0.5 * H/2 * math.sin(hour_angle) canvas.create_line(W/2, H/2, hour_x, hour_y, fill="#FF0032", width=4) minute_angle = (minute + second/60) * math.pi/30 - math.pi/2 #draws minutes' hand minute_x = W/2 + 0.7 * W/2 * math.cos(minute_angle) minute_y = H/2 + 0.7 * H/2 * math.sin(minute_angle) canvas.create_line(W/2, H/2, minute_x, minute_y, fill="#FF0032", width=2) second_angle = second * math.pi/30 - math.pi/2 #draws seconds' hand second_x = W/2 + 0.6 * W/2 * math.cos(second_angle) second_y = H/2 + 0.6 * W/2 * math.sin(second_angle) canvas.create_line(W/2, H/2, second_x, second_y, fill="#FF0032", width=1) canvas.after(1000, the_clock, region, city, canvas, C) the_clock('Europe/Vienna', 'Vienna', canvas_vienna, 0) #calls the function the_clock for each region the_clock('America/Guatemala', 'Guatemala', canvas_guatemala, 1) the_clock('America/Montevideo', 'Montevideo', canvas_montevideo, 2) the_clock('Asia/Calcutta', 'Calcutta', canvas_calcutta, 3) the_clock('Asia/Kamchatka', 'Kamchatka', canvas_kamchatka, 4) root.mainloop() # runs the main loop #colors and regions can be changed accordingly. For more regions check: https://mljar.com/blog/list-pytz-timezones/ or the README file.