|
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 |
|
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}") |
|
|
|
|
|
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() |