-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtimer.py
More file actions
81 lines (68 loc) · 3.38 KB
/
Copy pathtimer.py
File metadata and controls
81 lines (68 loc) · 3.38 KB
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
import tkinter as tk
from tkinter import messagebox
from datetime import timedelta
class Timer:
def __init__(self, root):
self.root = root
self.root.title("Timer")
self.root.geometry("400x200") # Adjusted for better layout
self.root.configure(bg="lightblue") # Set lightblue background
self.running = False
self.time_left = timedelta(0) # Time remaining as a timedelta object
# Input field for timer duration
self.input_label = tk.Label(root, text="Set Timer (D:HH:MM:SS):", font=("Arial", 14), bg="lightblue")
self.input_label.pack(pady=10)
self.time_entry = tk.Entry(root, font=("Arial", 14), justify="center")
self.time_entry.insert(0, "0:00:00:00") # Default format
self.time_entry.pack(pady=5)
# Display the countdown
self.timer_label = tk.Label(root, text="0:00:00:00.000", font=("Arial", 27), fg="blue", bg="lightblue")
self.timer_label.pack(pady=20)
# Start button
self.start_button = tk.Button(root, text="Start", command=self.start_timer, width=9, bg="green", fg="white")
self.start_button.pack(side=tk.LEFT, padx=6)
# Pause button
self.stop_button = tk.Button(root, text="Pause", command=self.pause_timer, width=10, bg="orange", fg="white")
self.stop_button.pack(side=tk.LEFT, padx=5)
# Reset button
self.reset_button = tk.Button(root, text="Reset", command=self.reset_timer, width=9, bg="red", fg="white")
self.reset_button.pack(side=tk.LEFT, padx=5)
def start_timer(self):
if not self.running:
self.running = True
try:
if self.time_left == timedelta(0): # Parse time only if the timer hasn't started
time_parts = self.time_entry.get().split(":")
if len(time_parts) != 4:
raise ValueError("Invalid format")
days, hours, minutes, seconds = map(int, time_parts)
self.time_left = timedelta(days=days, hours=hours, minutes=minutes, seconds=seconds)
self.update_timer()
except ValueError:
messagebox.showerror("Invalid Input", "Please enter time in D:HH:MM:SS format.")
def pause_timer(self):
self.running = False
def reset_timer(self):
self.running = False
self.time_left = timedelta(0)
self.timer_label.config(text="0:00:00:00.000")
self.time_entry.delete(0, tk.END)
self.time_entry.insert(0, "0:00:00:00")
def update_timer(self):
if self.running and self.time_left > timedelta(0):
self.time_left -= timedelta(milliseconds=10) # Subtract 10 ms
days = self.time_left.days
hours, remainder = divmod(self.time_left.seconds, 3600)
minutes, seconds = divmod(remainder, 60)
milliseconds = self.time_left.microseconds // 1000
self.timer_label.config(text=f"{days}:{hours:02}:{minutes:02}:{seconds:02}.{milliseconds:03}")
self.root.after(10, self.update_timer)
elif self.time_left <= timedelta(0) and self.running:
self.running = False
self.timer_label.config(text="0:00:00:00.000")
messagebox.showinfo("Timer Ended", "Time's up!")
# Main application execution
if __name__ == "__main__":
root = tk.Tk()
timer = Timer(root)
root.mainloop()