Pillole di rust: Semplice GUI per piccole interazioni

Recentemente ho avuto bisogno di creare uno script per una piccola attività, che però richiedeva la selezione di file/cartelle da parte di un utente che eseguiva il codice su un mac. Dato che l’utente non era esperto nell’uso del terminale, avevo bisogno di dare dei feedback tramite una GUI (Interfaccia Utente Grafica).

Essendo un piccolo script, non avevo intenzione di utilizzare framework elaborati come Dioxus, Tauri o simili. Non mi andava nemmeno di creare un sistema client/server e usare html per l’interfaccia. Così ho fatto qualche ricerca e ho trovato un paio di crates che mi hanno permesso di raggiungere il mio obiettivo e che voglio condividere con voi.

msgbox

Il primo che ho trovato è msgbox. In effetti questo crate è archiviato, e viene suggerito come sostituzione un’altro crate chiamato native-dialog-rs, di cui parlerò più avanti.

Questo crate permette la creazione di semplici box di dialogo, con un pulsante “OK”, che permettono di notificare l’utente di operazioni effettuate. Permette anche di impostare un’icona che darà l’idea del tipo di messaggio (se è un errore, un avviso, o solo un’informazione).

Il codice per creare un box di dialogo è semplicissimo:

fn main() {
    msgbox::create("Titolo", "Testo del messaggio", msgbox::IconType::Info);
}

Rusty File Dialog

Il secondo crate si chiama rfd e consente l’apertura del file picker di sistema. L’ho trovato utile per selezionare file o cartelle su cui lo script andrà ad operare.

Anche questo è davvero semplice da usare:

use rfd::FileDialog;

fn main() {
    let files = FileDialog::new()
                    .set_directory("~/")
                    .pick_files();
}

Si può decidere di selezionare un file, più file, una cartella o più cartelle (i metodi da richiamare sono diversi per ogni operazione, ma tutti intuitivi).

native-dialog-rs

Infine, questo crate è il sostituto di msgbox, e in realtà è in grado anche di coprire buona parte delle funzionalità di rfd. Inoltre, aggiunge la possibilità di creare dei box di conferma con due pulsanti: “Annulla” e “OK”.

Per quanto riguarda questo crate, ho fatto solo un test sul mio computer, ma sembra funzionare correttamente. La documentazione non è sviluppata come quella degli altri due, e potrebbe richiedere qualche dipendenza in più, ma in generale sembra una buona opzione che permette di avere tutte le funzionalità in una sola libreria.

Che dire delle finestre di input?

In molti casi avremo bisogno di una finestra che permetta all’utente di inserire un testo. Purtroppo, non sembra ci siano delle librerie che offrano questa funzionalità in modo semplice. In certi casi, se il testo da inserire non cambia, potreste valutare l’utilizzo di un file di configurazione per ovviare al problema. Se però non c’è modo di girare intorno a questa limitazione, dovrete valutare per forza l’utilizzo di un framework. Tauri e Dioxus sono le mie scelte preferite per lo sviluppo di applicazioni visuali per pc. Ci sono importanti differenze fra questi framework, ma analizzarle mi porterebbe un po’ fuori tema. Comunque, al momento della scrittura di questo articolo, la mia preferenza è Tauri, in quanto è decisamente il più maturo dei due.

Spero che questo breve articolo possa esservi stato d’aiuto. A presto 👋🏻