75 lines
2.3 KiB
Python
75 lines
2.3 KiB
Python
import subprocess
|
|
import threading
|
|
import tkinter as tk
|
|
from tkinter import ttk
|
|
|
|
# Function to run the bash script and track output for dependency installation
|
|
def run_bash_script():
|
|
global process
|
|
try:
|
|
|
|
|
|
|
|
# Run the bash script and capture stdout and stderr in real-time
|
|
process = subprocess.Popen(
|
|
['bash', './runn.sh'],
|
|
stdout=subprocess.PIPE,
|
|
stderr=subprocess.PIPE,
|
|
text=True
|
|
)
|
|
|
|
# Read stdout in real-time and track pip install progress
|
|
for stdout_line in iter(process.stdout.readline, ""):
|
|
if stdout_line:
|
|
print(f"Output: {stdout_line.strip()}")
|
|
if "START_PIP_INSTALL" in stdout_line:
|
|
print("Pip install started...")
|
|
elif "END_PIP_INSTALL" in stdout_line:
|
|
print("Pip install completed. Closing loading window...")
|
|
close_loading_window() # Close the window when pip install completes
|
|
|
|
process.stdout.close()
|
|
|
|
# Read stderr at the end
|
|
stderr = process.stderr.read()
|
|
if stderr:
|
|
print(f"Error: {stderr.strip()}")
|
|
|
|
except Exception as e:
|
|
print(f"Exception occurred: {e}")
|
|
finally:
|
|
if process.poll() is None: # Check if the process is still running
|
|
process.wait() # Wait for the Bash script to finish completely
|
|
|
|
# Function to show the loading window
|
|
def show_loading_window():
|
|
global root
|
|
root = tk.Tk()
|
|
root.title("Please Wait")
|
|
root.geometry("300x100")
|
|
|
|
label = ttk.Label(root, text="Downloading dependencies. Please wait...", anchor="center")
|
|
label.pack(pady=20)
|
|
|
|
# Add a progress bar (just for visual purposes)
|
|
progress = ttk.Progressbar(root, mode="indeterminate")
|
|
progress.pack(pady=10)
|
|
progress.start(10) # Start the indeterminate progress bar
|
|
|
|
# Prevent closing the window manually
|
|
root.protocol("WM_DELETE_WINDOW", lambda: None)
|
|
|
|
# Start a separate thread to run the bash script
|
|
threading.Thread(target=run_bash_script).start()
|
|
|
|
root.mainloop()
|
|
|
|
# Function to close the loading window
|
|
def close_loading_window():
|
|
if root:
|
|
root.withdraw()
|
|
|
|
if __name__ == "__main__":
|
|
show_loading_window()
|
|
|