Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 2b6a83e

Browse files
authored
Add files via upload
1 parent 31b935b commit 2b6a83e

File tree

1 file changed

+112
-0
lines changed

1 file changed

+112
-0
lines changed

live-progress-bar/progress_bar_app.py

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
import tkinter as tk
2+
from tkinter import ttk, messagebox
3+
import threading
4+
import time
5+
6+
7+
class ProgressBarApp:
8+
def __init__(self, root):
9+
self.root = root
10+
self.root.title("Live Progress Bar")
11+
self.root.geometry("420x260")
12+
self.root.resizable(False, False)
13+
14+
self.stop_flag = False
15+
self.thread = None
16+
17+
self.setup_ui()
18+
19+
def setup_ui(self):
20+
tk.Label(self.root, text="Live Progress Bar Generator", font=("Helvetica", 14, "bold")).pack(pady=10)
21+
22+
# Time Inputs
23+
time_frame = tk.Frame(self.root)
24+
time_frame.pack(pady=5)
25+
26+
self.hours_entry = self._create_time_input(time_frame, "Hours")
27+
self.minutes_entry = self._create_time_input(time_frame, "Minutes")
28+
self.seconds_entry = self._create_time_input(time_frame, "Seconds")
29+
30+
# Progress Bar
31+
self.progress = ttk.Progressbar(self.root, length=350, mode='determinate', maximum=100)
32+
self.progress.pack(pady=15)
33+
34+
# Percentage Label
35+
self.percent_label = tk.Label(self.root, text="0.00%", font=("Helvetica", 12))
36+
self.percent_label.pack()
37+
38+
# Buttons
39+
btn_frame = tk.Frame(self.root)
40+
btn_frame.pack(pady=10)
41+
42+
self.start_btn = tk.Button(btn_frame, text="Start", command=self.start_progress)
43+
self.start_btn.grid(row=0, column=0, padx=10)
44+
45+
self.stop_btn = tk.Button(btn_frame, text="Stop", command=self.stop_progress, state=tk.DISABLED)
46+
self.stop_btn.grid(row=0, column=1, padx=10)
47+
48+
def _create_time_input(self, parent, label_text):
49+
frame = tk.Frame(parent)
50+
frame.pack(side=tk.LEFT, padx=10)
51+
tk.Label(frame, text=label_text).pack()
52+
entry = tk.Entry(frame, width=5)
53+
entry.pack()
54+
return entry
55+
56+
def get_total_seconds(self):
57+
try:
58+
h = int(self.hours_entry.get() or 0)
59+
m = int(self.minutes_entry.get() or 0)
60+
s = int(self.seconds_entry.get() or 0)
61+
total = h * 3600 + m * 60 + s
62+
if total <= 0:
63+
raise ValueError
64+
return total
65+
except ValueError:
66+
return None
67+
68+
def start_progress(self):
69+
total_seconds = self.get_total_seconds()
70+
if total_seconds is None:
71+
messagebox.showerror("Invalid Input", "Please enter a valid positive time.")
72+
return
73+
74+
self.stop_flag = False
75+
self.start_btn.config(state=tk.DISABLED)
76+
self.stop_btn.config(state=tk.NORMAL)
77+
self.progress["value"] = 0
78+
self.percent_label.config(text="0.00%")
79+
80+
self.thread = threading.Thread(target=self.run_progress, args=(total_seconds,), daemon=True)
81+
self.thread.start()
82+
83+
def run_progress(self, duration):
84+
start_time = time.time()
85+
end_time = start_time + duration
86+
87+
while not self.stop_flag:
88+
now = time.time()
89+
elapsed = now - start_time
90+
progress = min(elapsed / duration, 1.0) # بین ۰ و ۱
91+
percentage = progress * 100
92+
93+
self.progress["value"] = percentage
94+
self.percent_label.config(text=f"{percentage:.2f}%")
95+
96+
if progress >= 1.0:
97+
break
98+
99+
time.sleep(0.05) # smoother
100+
101+
self.start_btn.config(state=tk.NORMAL)
102+
self.stop_btn.config(state=tk.DISABLED)
103+
104+
def stop_progress(self):
105+
self.stop_flag = True
106+
self.percent_label.config(text="Stopped")
107+
108+
109+
if __name__ == "__main__":
110+
root = tk.Tk()
111+
app = ProgressBarApp(root)
112+
root.mainloop()

0 commit comments

Comments
 (0)