Skip to content

Instantly share code, notes, and snippets.

@DBoyara
Created July 4, 2022 15:00
Show Gist options
  • Select an option

  • Save DBoyara/5a1a47e1cdfe11beca3e4976f03de4ce to your computer and use it in GitHub Desktop.

Select an option

Save DBoyara/5a1a47e1cdfe11beca3e4976f03de4ce to your computer and use it in GitHub Desktop.

Revisions

  1. DBoyara created this gist Jul 4, 2022.
    47 changes: 47 additions & 0 deletions simple_console_alarm.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,47 @@
    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()