diff --git a/src/gui/main_window.py b/src/gui/main_window.py index c882d68..ec201e8 100644 --- a/src/gui/main_window.py +++ b/src/gui/main_window.py @@ -7,6 +7,7 @@ built with CustomTkinter. from __future__ import annotations import os +import sys import threading import time import tkinter as tk @@ -139,6 +140,18 @@ class MainWindow(ctk.CTk): # ── Config ───────────────────────────────────────────────── + @staticmethod + def _get_app_dir() -> Path: + """Return the application directory (where config.yaml lives). + + When running as a PyInstaller bundle (frozen), uses the + directory of the .exe file. Otherwise navigates from + ``__file__`` up to the project root. + """ + if getattr(sys, 'frozen', False): + return Path(sys.executable).parent + return Path(__file__).parent.parent.parent + def _find_config(self) -> Path | None: """Find the user configuration file. @@ -150,8 +163,7 @@ class MainWindow(ctk.CTk): Returns: Path to user config file, or None if not found. """ - # Navigate from src/gui/main_window.py -> project root - app_dir = Path(__file__).parent.parent.parent + app_dir = self._get_app_dir() # 1. Check for user config at project root user_config = app_dir / "config.yaml" @@ -174,13 +186,12 @@ class MainWindow(ctk.CTk): def _get_user_config_path(self) -> Path: """Get the path to the user config file (config.yaml). - Creates config.yaml in project root if it doesn't exist. + Creates config.yaml in app directory if it doesn't exist. Returns: Path to user config file. """ - # Navigate from src/gui/main_window.py -> project root - app_dir = Path(__file__).parent.parent.parent + app_dir = self._get_app_dir() config_path = app_dir / "config.yaml" config_path.parent.mkdir(parents=True, exist_ok=True) return config_path