Код: Выделить всё
import os
import subprocess
import tkinter as tk
from tkinter import ttk, filedialog, messagebox
def run_installation(folder_path, selected_setups):
total_setups = len(selected_setups)
progress_bar\['maximum'\] = total_setups
for i, setup_file in enumerate(selected_setups, start=1):
setup_path = os.path.join(folder_path, setup_file)
subprocess.Popen(setup_path, shell=True).wait()
progress_bar['value'] = i
root.update()
messagebox.showinfo("Installation Complete", "All software installations have been completed.")
def browse_folder():
folder_path = filedialog.askdirectory()
if folder_path:
setup_files = \[f for f in os.listdir(folder_path) if f.endswith('.exe')\]
if setup_files:
folder_entry.delete(0, tk.END)
folder_entry.insert(tk.END, folder_path)
software_listbox.delete(0, tk.END)
for setup_file in setup_files:
software_listbox.insert(tk.END, setup_file)
else:
messagebox.showinfo("No Software Found", "There are no software setups in the selected folder.")
def select_all():
software_listbox.select_set(0, tk.END)
def deselect_all():
software_listbox.selection_clear(0, tk.END)
def finish_installation():
folder_path = folder_entry.get()
selected_indices = software_listbox.curselection()
selected_setups = \[software_listbox.get(idx) for idx in selected_indices\]
if folder_path and selected_setups:
run_installation(folder_path, selected_setups)
# Create GUI
root = tk.Tk()
root.title("Software Installer")
frame = ttk.Frame(root, padding="20")
frame.grid(row=0, column=0, sticky=(tk.W, tk.E, tk.N, tk.S))
browse_button = ttk.Button(frame, text="Browse", command=browse_folder)
browse_button.grid(row=0, column=0, padx=5, pady=10)
folder_entry = ttk.Entry(frame, width=50)
folder_entry.grid(row=0, column=1, padx=5, pady=10)
select_all_button = ttk.Button(frame, text="Select All", command=select_all)
select_all_button.grid(row=1, column=0, padx=5, pady=10)
deselect_all_button = ttk.Button(frame, text="Deselect All", command=deselect_all)
deselect_all_button.grid(row=1, column=1, padx=5, pady=10)
start_button = ttk.Button(frame, text="Start Installation", command=finish_installation)
start_button.grid(row=1, column=2, padx=5, pady=10)
software_listbox = tk.Listbox(frame, selectmode=tk.MULTIPLE, width=50, height=10)
software_listbox.grid(row=2, columnspan=3, pady=10)
progress_bar = ttk.Progressbar(frame, orient="horizontal", length=300, mode="determinate")
progress_bar.grid(row=3, columnspan=3, pady=10)
root.mainloop()
Подробнее здесь: https://stackoverflow.com/questions/783 ... stallation