import tkinter as tk
from tkinter import ttk
import subprocess

class CountdownApp(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title("Shutdown Countdown")
        self.geometry("250x150")
        self.countdown_seconds = 0
        self.timer_running = False
        self.shutdown_process = None

        self.style = ttk.Style()
        self.style.theme_use("clam")
        self.style.configure("TLabel", background="#333333", foreground="#ffffff")
        self.style.configure("TEntry", fieldbackground="#555555", foreground="#ffffff")
        self.style.configure("TButton", background="#555555", foreground="#ffffff")
        self.configure(background="#333333")

        self.countdown_label = ttk.Label(self, font=("Arial", 18))
        self.countdown_label.pack(pady=10)

        input_frame = ttk.Frame(self)
        input_frame.pack(pady=5)
        minutes_label = ttk.Label(input_frame, text="Minutes:")
        minutes_label.pack(side="left", padx=5)
        self.minutes_entry = ttk.Entry(input_frame, width=5)
        self.minutes_entry.pack(side="left")
        seconds_label = ttk.Label(input_frame, text="Seconds:")
        seconds_label.pack(side="left", padx=5)
        self.seconds_entry = ttk.Entry(input_frame, width=5)
        self.seconds_entry.pack(side="left")

        button_frame = ttk.Frame(self)
        button_frame.pack(pady=5)
        self.start_button = ttk.Button(button_frame, text="Start", command=self.start_countdown)
        self.start_button.pack(side="left", padx=5)
        self.cancel_button = ttk.Button(button_frame, text="Cancel", command=self.cancel_countdown, state="disabled")
        self.cancel_button.pack(side="left")

    def start_countdown(self):
        try:
            minutes = int(self.minutes_entry.get() or 0)
            seconds = int(self.seconds_entry.get() or 0)
            self.countdown_seconds = minutes * 60 + seconds
        except ValueError:
            self.countdown_label.config(text="Invalid input")
            return

        self.update_countdown_label()
        self.timer_running = True
        self.cancel_button.config(state="normal")
        self.countdown_loop()

    def cancel_countdown(self):
        self.timer_running = False
        if self.shutdown_process:
            try:
                self.shutdown_process.terminate()
            except ProcessLookupError:
                pass
            self.shutdown_process = None
        self.cancel_button.config(state="disabled")

    def update_countdown_label(self):
        minutes, seconds = divmod(self.countdown_seconds, 60)
        countdown_text = f"{minutes:02d}:{seconds:02d}"
        self.countdown_label.config(text=countdown_text)

    def countdown_loop(self):
        if self.countdown_seconds > 0 and self.timer_running:
            self.update_countdown_label()
            self.countdown_seconds -= 1
            self.after(1000, self.countdown_loop)
        elif self.countdown_seconds == 0 and self.timer_running:
            self.timer_running = False
            self.shutdown_system()
            self.cancel_button.config(state="disabled")

    def shutdown_system(self):
        self.shutdown_process = subprocess.Popen(["shutdown", "-s", "-t", "0"], creationflags=subprocess.DETACHED_PROCESS)

if __name__ == "__main__":
    app = CountdownApp()
    app.mainloop()
Categories: Project

0 Comments

Leave a Reply

Avatar placeholder

Your email address will not be published. Required fields are marked *