# `main.py` ## Scopo `main.py` รจ il punto di ingresso dell'applicazione desktop. Inizializza il loop asincrono condiviso, crea il client database condiviso e costruisce il launcher con i pulsanti che aprono i moduli operativi. ## Flusso principale ```{mermaid} flowchart TD A["Avvio di main.py"] --> B["Configura policy asyncio su Windows"] B --> C["Ottiene loop globale con get_global_loop()"] C --> D["Imposta il loop come default"] D --> E["Costruisce DSN SQL Server"] E --> F["Crea AsyncMSSQLClient condiviso"] F --> G["Istanzia Launcher"] G --> H["Mostra finestra principale"] H --> I{"Click su un pulsante"} I --> J["open_reset_corsie_window()"] I --> K["open_layout_window()"] I --> L["open_celle_multiple_window()"] I --> M["open_search_window()"] I --> N["open_pickinglist_window()"] ``` ## Schema di chiamata ```{mermaid} flowchart LR Launcher["Launcher.__init__"] --> Reset["open_reset_corsie_window"] Launcher --> Layout["open_layout_window"] Launcher --> Ghost["open_celle_multiple_window"] Launcher --> Search["open_search_window"] Launcher --> Pick["open_pickinglist_window"] Pick --> PickFactory["create_pickinglist_frame"] ``` ## Note - `db_app` viene creato una sola volta e poi passato a tutte le finestre. - Alla chiusura del launcher viene chiamato `db_app.dispose()` sul loop globale. - `open_pickinglist_window()` costruisce la finestra in modo nascosto e la rende visibile solo a layout pronto, per ridurre lo sfarfallio iniziale.