46 lines
1.2 KiB
Markdown
46 lines
1.2 KiB
Markdown
# `gestione_aree.py`
|
|
|
|
## Scopo
|
|
|
|
Questo modulo fornisce l'infrastruttura async usata dalle finestre GUI:
|
|
|
|
- loop asincrono globale;
|
|
- overlay di attesa;
|
|
- runner che collega coroutine e callback Tk.
|
|
|
|
## Flusso infrastrutturale
|
|
|
|
```{mermaid}
|
|
flowchart TD
|
|
A["Metodo finestra GUI"] --> B["AsyncRunner.run(awaitable)"]
|
|
B --> C{"busy overlay richiesto?"}
|
|
C -- Si --> D["BusyOverlay.show()"]
|
|
C -- No --> E["Salta overlay"]
|
|
D --> F["run_coroutine_threadsafe(awaitable, loop globale)"]
|
|
E --> F
|
|
F --> G["Polling del Future"]
|
|
G --> H{"Future completato?"}
|
|
H -- No --> G
|
|
H -- Si --> I{"Successo o errore?"}
|
|
I -- Successo --> J["widget.after(..., on_success)"]
|
|
I -- Errore --> K["widget.after(..., on_error)"]
|
|
J --> L["BusyOverlay.hide()"]
|
|
K --> L
|
|
```
|
|
|
|
## Schema di componenti
|
|
|
|
```{mermaid}
|
|
flowchart LR
|
|
Holder["_LoopHolder"] --> Loop["get_global_loop"]
|
|
Loop --> Runner["AsyncRunner"]
|
|
Overlay["BusyOverlay"] --> Runner
|
|
Runner --> GUI["Moduli GUI"]
|
|
```
|
|
|
|
## Note
|
|
|
|
- Il modulo fa da ponte tra thread Tk e thread del loop asincrono.
|
|
- `BusyOverlay` e riusato da piu finestre, quindi e un componente condiviso.
|
|
- `AsyncRunner` evita che i moduli GUI gestiscano direttamente i `Future`.
|