From a01d8992c062f662bb933c1b3fda580b567845ba Mon Sep 17 00:00:00 2001 From: Yannik Schmidt Date: Sat, 15 Feb 2025 19:43:35 +0100 Subject: [PATCH] feat: spawn info widget from client.py --- client.py | 7 +++++++ infowidget.py | 25 ++++++++++++------------- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/client.py b/client.py index 69c1a8d..313f5a8 100644 --- a/client.py +++ b/client.py @@ -10,6 +10,7 @@ import cache_utils import imagetools import webbrowser import statekeeper +import infowidget customtkinter.set_appearance_mode("dark") customtkinter.set_default_color_theme("blue") @@ -27,6 +28,8 @@ details_elements = [] non_disabled_entry_color = None all_metadata = None +infowidget_window = None + db = None # app data-backend (i.e. LocalFS or FTP) CONFIG_FILE = "gamevault_config.json" @@ -180,9 +183,13 @@ def load_main(): '''Load the main page overview''' global all_metadata + global infowidget_window app.title("Lan Vault: Overview") + if not infowidget_window: + infowidget_window = infowidget.ProgressBarApp(app) + # navbar should not expand when window is resized app.grid_rowconfigure(0, weight=0) # buttongrid (scrollable frame) should expand when window is resized diff --git a/infowidget.py b/infowidget.py index 7e26195..fbdbb51 100644 --- a/infowidget.py +++ b/infowidget.py @@ -16,14 +16,15 @@ import time import string class ProgressBarApp: - def __init__(self, root): - self.root = root + def __init__(self, parent): + + self.root = tk.Toplevel(parent) self.root.title("Dynamic Progress Bars") - self.delete_all_button = tk.Button(root, text="Delete All Finished", command=self.delete_all_finished, state=tk.DISABLED) + self.delete_all_button = tk.Button(self.root, text="Delete All Finished", command=self.delete_all_finished, state=tk.DISABLED) self.delete_all_button.pack(pady=5) - self.frame = tk.Frame(root) + self.frame = tk.Frame(self.root) self.frame.pack(pady=10) self.progress_bars = [] # Store tuples of (progressbar, frame, duration, delete_button) @@ -33,7 +34,6 @@ class ProgressBarApp: def add_progress_bars(self): while self.running: - time.sleep(3) # Wait before adding a new progress bar frame = tk.Frame(self.frame) frame.pack(fill=tk.X, pady=2) @@ -47,9 +47,14 @@ class ProgressBarApp: random_letter = random.choice(string.ascii_uppercase) label = tk.Label(frame, text=random_letter) label.pack(side=tk.LEFT, padx=5) - + + self.progress_bars.insert(0, (progress, frame, delete_button)) # Insert at the top + frame.pack(fill=tk.X, pady=2, before=self.frame.winfo_children()[-1] if self.frame.winfo_children() else None) + duration = random.randint(1, 10) # Random fill time threading.Thread(target=self.fill_progress, args=(progress, duration, frame, delete_button), daemon=True).start() + + time.sleep(30) # Wait before adding a new progress bar def fill_progress(self, progress, duration, frame, delete_button): for i in range(101): # Fill progress bar over 'duration' seconds @@ -82,10 +87,4 @@ class ProgressBarApp: def on_close(self): self.running = False - self.root.destroy() - -if __name__ == "__main__": - root = tk.Tk() - app = ProgressBarApp(root) - root.protocol("WM_DELETE_WINDOW", app.on_close) - root.mainloop() + self.root.destroy() \ No newline at end of file