#!/usr/bin/env python3 """ Portfolio Manager - Main Entry Point Desktop application for managing investment portfolio (180k EUR target). Built with PyQt6, SQLite, and yfinance. """ import sys import logging from pathlib import Path from PyQt6.QtWidgets import QApplication from PyQt6.QtCore import Qt # Add src to path for imports sys.path.insert(0, str(Path(__file__).parent)) from src.gui.main_window import MainWindow def setup_logging(): """Configure application logging.""" logging.basicConfig( level=logging.DEBUG, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', handlers=[ logging.FileHandler('portfolio.log'), logging.StreamHandler(sys.stdout) ] ) logger = logging.getLogger(__name__) logger.info("=" * 60) logger.info("Portfolio Manager Application Starting") logger.info("=" * 60) def main(): """Main application entry point.""" # Setup logging setup_logging() logger = logging.getLogger(__name__) try: # Create QApplication app = QApplication(sys.argv) app.setApplicationName("Portfolio Manager") app.setOrganizationName("Personal Finance") # Enable High DPI scaling if hasattr(Qt.ApplicationAttribute, 'AA_EnableHighDpiScaling'): app.setAttribute(Qt.ApplicationAttribute.AA_EnableHighDpiScaling, True) if hasattr(Qt.ApplicationAttribute, 'AA_UseHighDpiPixmaps'): app.setAttribute(Qt.ApplicationAttribute.AA_UseHighDpiPixmaps, True) # Create and show main window logger.info("Creating main window...") main_window = MainWindow() main_window.show() logger.info("Application ready. Entering main loop.") # Run application event loop exit_code = app.exec() logger.info(f"Application exiting with code {exit_code}") return exit_code except Exception as e: logger.critical(f"Fatal error during application startup: {e}", exc_info=True) return 1 if __name__ == '__main__': sys.exit(main())