import tkinter as tk
import time
import datetime
import pytz
from playsound import playsound
import threading
class DigitalClock:
def __init__(self, master):
self.master = master
self.master.title("Digital Clock")
# Create label for time display
self.time_label = tk.Label(self.master, font=('Arial', 100), bg='white', fg='black')
self.time_label.pack(pady=20)
# Create label for date display
self.date_label = tk.Label(self.master, font=('Arial', 50), bg='white', fg='black')
self.date_label.pack()
# Create drop-down menu for time zone selection
self.time_zone_label = tk.Label(self.master, text='Time Zone:', font=('Arial', 20))
self.time_zone_label.pack()
self.selected_tz = tk.StringVar(self.master, 'Asia/Kolkata')
self.time_zone_menu = tk.OptionMenu(self.master, self.selected_tz, 'America/New_York', 'Europe/London', 'Asia/Tokyo', 'Asia/Kolkata')
self.time_zone_menu.pack(pady=10)
self.time_zone_menu.config(font=('Arial', 20))
# Create button to set alarm
self.alarm_button = tk.Button(self.master, text='Set Alarm', command=self.set_alarm)
self.alarm_button.pack(pady=10)
# Create entry for alarm time input
self.alarm_entry = tk.Entry(self.master, font=('Arial', 20))
self.alarm_entry.pack()
# Set default time zone
self.time_zone = pytz.timezone('Asia/Kolkata')
# Update clock display
self.update_time()
def update_time(self):
current_time = datetime.datetime.now(self.time_zone).strftime('%H:%M:%S')
current_date = datetime.datetime.now(self.time_zone).strftime('%A, %B %d, %Y')
self.time_label.config(text=current_time)
self.date_label.config(text=current_date)
self.master.after(1000, self.update_time)
def set_alarm(self):
try:
alarm_time_str = self.alarm_entry.get()
alarm_time = datetime.datetime.strptime(alarm_time_str, '%H:%M:%S')
alarm_time = self.time_zone.localize(alarm_time)
now = datetime.datetime.now(self.time_zone)
time_diff = (alarm_time - now).total_seconds()
if time_diff < 0:
time_diff += 86400
self.master.after(int(time_diff * 1000), self.show_alarm)
self.alarm_entry.delete(0, tk.END)
except ValueError:
tk.messagebox.showerror(title='Error', message='Invalid Time Format')
def show_alarm(self):
playsound('C:/Users/ACER/Downloads/Music/audio.mp3')
# Create callback function for time zone selection
def set_time_zone(self, *args):
self.time_zone = pytz.timezone(self.selected_tz.get())
root = tk.Tk()
app = DigitalClock(root)
# Set the callback function for the time zone selection menu
app.selected_tz.trace('w', app.set_time_zone)
root.mainloop()
The time and date is being displayed but the alarm doesnt seem to work can someone please help i tried to take entry of the alarm time then check if the time has not already been crossed if yes then the alarm is set for next day and if no then the time diffrence is converted into seconds and then the showalarm function is called after the amount of timediffrence