import tkinter as tk import time from argparse import ArgumentParser from logging import getLogger from tkinter import messagebox import schedule logger = getLogger(__name__) def _init_parser() -> ArgumentParser: parser = ArgumentParser() parser.add_argument("hour", help="An hour for an alarm clock", type=int) parser.add_argument("minute", help="An minute for an alarm clock", type=int) return parser def _init_messagebox(hour: int, minute: int): root = tk.Tk() root.withdraw() messagebox.showwarning("Alarm Clock!", f"Ding Dong! Time is {hour}:{minute}") return schedule.CancelJob def main(): parser = _init_parser() args = parser.parse_args() if not 0 <= args.hour <= 24: return logger.error("Hour must be between 0 and 24 value") if not 0 <= args.minute <= 60: return logger.error("Minute must be between 0 and 60 value") (schedule .every() .day .at(f"{args.hour}:{args.minute}") .do(_init_messagebox, hour=args.hour, minute=args.minute)) while True: schedule.run_pending() time.sleep(1) if __name__ == '__main__': main()