import tkinter as tk from tkinter import filedialog, messagebox, ttk import zipfile import os import threading def extract_zip(): zip_file = filedialog.askopenfilename(filetypes=[("ZIP Files", "*.zip")]) if not zip_file: return extract_to = filedialog.askdirectory(title="Select Extract Folder") if not extract_to: return progress["value"] = 0 # Reset progress bar threading.Thread(target=extract_zip_thread, args=(zip_file, extract_to)).start() def extract_zip_thread(zip_file, extract_to): try: with zipfile.ZipFile(zip_file, 'r') as zip_ref: files = zip_ref.namelist() total_files = len(files) for i, file in enumerate(files): zip_ref.extract(file, extract_to) progress["value"] = ((i + 1) / total_files) * 100 root.update_idletasks() messagebox.showinfo("Success", f"✅ Extracted to: {extract_to}") except Exception as e: messagebox.showerror("Error", f"❌ Error: {e}") # GUI Setup root = tk.Tk() root.title("ZIP Extractor") button = tk.Button(root, text="Select ZIP & Extract", command=extract_zip) button.pack(pady=10) progress = ttk.Progressbar(root, orient="horizontal", length=300, mode="determinate") progress.pack(pady=10) root.mainloop()