-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathLINUX-shutdown_timer.py
151 lines (120 loc) · 5.84 KB
/
LINUX-shutdown_timer.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
import time
import os
from datetime import datetime, timedelta
import threading
import tkinter as tk
from tkinter import messagebox
from tkinter import ttk
import math
shutdown_cancelled = False
def shutdown_system():
if not shutdown_cancelled:
print("\nDer Computer wird jetzt heruntergefahren...")
os.system("shutdown now")
else:
print("\nShutdown abgebrochen!")
def format_time(seconds):
hours = seconds // 3600
minutes = (seconds % 3600) // 60
seconds = seconds % 60
return f"{int(hours)} Stunden, {int(minutes)} Minuten, {int(seconds)} Sekunden"
def show_progress_gui(total_seconds):
"""Zeigt die GUI mit dem Fortschrittsbalken und der Zeit an."""
progress_window = tk.Toplevel(root)
progress_window.geometry("450x400") # Größere Standardgröße für das Fortschrittsfenster
progress_window.minsize(450, 400) # Mindestgröße setzen
progress_window.title("Shutdown Timer")
progress_window.configure(bg="#333333") # Dark Mode Hintergrundfarbe
tk.Label(progress_window, text="Shutdown Timer", font=("Helvetica", 16, "bold"), bg="#333333", fg="#ffffff").pack(pady=10)
canvas = tk.Canvas(progress_window, width=200, height=200, bg="#333333", highlightthickness=0)
canvas.pack()
time_label = tk.Label(progress_window, text="", font=("Helvetica", 12), bg="#333333", fg="#ffffff")
time_label.pack(pady=10)
def draw_arc(percentage):
"""Zeichnet einen Kreisbogen entsprechend des Fortschritts in Prozent."""
canvas.delete("all")
canvas.create_oval(10, 10, 190, 190, outline="#555555", width=2)
canvas.create_arc(10, 10, 190, 190, start=90, extent=-3.6 * percentage, fill="#008000", outline="")
def update_progress():
"""Aktualisiert das Kreisdiagramm und die verbleibende Zeit."""
nonlocal total_seconds
start_time = time.time()
while total_seconds > 0 and not shutdown_cancelled:
elapsed_time = time.time() - start_time
remaining_time = total_seconds - elapsed_time
if remaining_time < 0:
remaining_time = 0
percentage = (remaining_time / total_seconds) * 100
draw_arc(percentage)
time_label.config(text=f"Verbleibende Zeit: {format_time(remaining_time)}")
time.sleep(1)
root.update_idletasks()
if remaining_time <= 0:
break
if not shutdown_cancelled:
shutdown_system()
cancel_button = tk.Button(progress_window, text="Cancel Shutdown", command=lambda: cancel_shutdown(progress_window), bg="#DC143C", fg="white", font=("Helvetica", 12, "bold"))
cancel_button.pack(pady=20)
progress_thread = threading.Thread(target=update_progress)
progress_thread.start()
def start_timer():
global shutdown_cancelled
shutdown_cancelled = False
try:
minutes = int(entry_minutes.get())
total_seconds = minutes * 60
root.withdraw() # Verstecke das Hauptfenster
show_progress_gui(total_seconds)
except ValueError:
messagebox.showerror("Fehler", "Bitte eine gültige Zahl eingeben!")
def start_countdown():
global shutdown_cancelled
shutdown_cancelled = False
try:
target_hour = int(entry_hour.get())
target_minute = int(entry_minute.get())
now = datetime.now()
target_time = now.replace(hour=target_hour, minute=target_minute)
# Falls die Zielzeit in der Vergangenheit liegt, füge einen Tag hinzu
if target_time < now:
target_time += timedelta(days=1)
total_seconds = (target_time - now).total_seconds()
root.withdraw() # Verstecke das Hauptfenster
show_progress_gui(total_seconds)
except ValueError:
messagebox.showerror("Fehler", "Bitte eine gültige Uhrzeit eingeben!")
def cancel_shutdown(progress_window):
global shutdown_cancelled
shutdown_cancelled = True
progress_window.destroy() # Schließt das Fortschrittsfenster
root.deiconify() # Zeigt das Hauptfenster wieder an
messagebox.showinfo("Abbruch", "Shutdown abgebrochen!")
# GUI-Setup
root = tk.Tk()
root.title("Shutdown Timer")
root.geometry("450x250") # Größere Standardgröße für das Hauptfenster
root.minsize(450, 250) # Mindestgröße setzen
root.configure(bg="#333333") # Dark Mode Hintergrundfarbe
# Überschrift
header_label = tk.Label(root, text="Shutdown Timer & Alarm", font=("Helvetica", 16, "bold"), bg="#333333", fg="#ffffff")
header_label.pack(pady=10)
# Timer-Einstellungen
frame_timer = tk.Frame(root, bg="#333333")
frame_timer.pack(pady=10)
tk.Label(frame_timer, text="Set Timer (Minutes):", bg="#333333", fg="#ffffff", font=("Helvetica", 12)).pack(side=tk.LEFT, padx=5)
entry_minutes = tk.Entry(frame_timer, width=5, font=("Helvetica", 12), bg="#444444", fg="#ffffff")
entry_minutes.pack(side=tk.LEFT, padx=5)
button_set_timer = tk.Button(frame_timer, text="Start Timer", command=start_timer, bg="#2196F3", fg="white", font=("Helvetica", 12, "bold"))
button_set_timer.pack(side=tk.LEFT, padx=10)
# Countdown-Einstellungen
frame_countdown = tk.Frame(root, bg="#333333")
frame_countdown.pack(pady=10)
tk.Label(frame_countdown, text="Hour (0-23):", bg="#333333", fg="#ffffff", font=("Helvetica", 12)).pack(side=tk.LEFT, padx=5)
entry_hour = tk.Entry(frame_countdown, width=5, font=("Helvetica", 12), bg="#444444", fg="#ffffff")
entry_hour.pack(side=tk.LEFT, padx=5)
tk.Label(frame_countdown, text="Minute (0-59):", bg="#333333", fg="#ffffff", font=("Helvetica", 12)).pack(side=tk.LEFT, padx=5)
entry_minute = tk.Entry(frame_countdown, width=5, font=("Helvetica", 12), bg="#444444", fg="#ffffff")
entry_minute.pack(side=tk.LEFT, padx=5)
button_set_countdown = tk.Button(frame_countdown, text="Set Alarm", command=start_countdown, bg="#2196F3", fg="white", font=("Helvetica", 12, "bold"))
button_set_countdown.pack(side=tk.LEFT, padx=10)
root.mainloop()