""" Tesla Coil Spark Physics Course - Main Application Entry Point PyQt5 Desktop Application """ import sys from pathlib import Path # Add parent directory to path so we can import app package sys.path.insert(0, str(Path(__file__).parent.parent)) from PyQt5.QtWidgets import QApplication, QMessageBox from PyQt5.QtCore import Qt # Import configuration and models from app import config from app.database import get_database from app.models import get_course from app.views import MainWindow def main(): """Main application entry point""" # Create QApplication app = QApplication(sys.argv) app.setApplicationName(config.APP_NAME) app.setApplicationVersion(config.APP_VERSION) app.setOrganizationName(config.APP_AUTHOR) # Enable high DPI scaling app.setAttribute(Qt.AA_EnableHighDpiScaling, True) app.setAttribute(Qt.AA_UseHighDpiPixmaps, True) print("="*60) print(f"{config.APP_NAME} v{config.APP_VERSION}") print("="*60) try: # Initialize database print("[*] Initializing database...") db = get_database() print(f"[OK] Database ready: {db.db_path}") # Load course structure print("[*] Loading course structure...") course = get_course() print(f"[OK] Course loaded: {course.title}") # Validate lesson files print("[*] Validating lesson files...") if course.validate(): print("[OK] All lesson files found") else: print("[WARN] Some lesson files missing (see above)") # Create and show main window print("[*] Creating main window...") window = MainWindow() window.show() print("[OK] Application ready!\n") # Run application event loop return app.exec_() except Exception as e: # Show error dialog print(f"\n[ERROR] {e}") import traceback traceback.print_exc() error_dialog = QMessageBox() error_dialog.setIcon(QMessageBox.Critical) error_dialog.setWindowTitle("Error") error_dialog.setText("Failed to initialize application") error_dialog.setInformativeText(str(e)) error_dialog.setDetailedText(traceback.format_exc()) error_dialog.exec_() return 1 if __name__ == '__main__': sys.exit(main())