Dialog lezione 4 – Creazione di un menu

Dopo molto tempo, eccoci finalmente alla quarta lezione sulla creazione di interfacce utente utilizzando l’utility dialog (per le puntate precedenti vi rimando alla sezione Articoli a puntate del sito, raggiungibile da qui). In questa lezione ci occuperemo della creazione di un menú con diverse opzioni. Strumento che ci tornerá utile ogni qualvolta dovremo presentare agli utenti un certo numero di operazioni che possono essere effettuate. Un esempio di come appare il menu con le interfacce dialog, e mostrato nella figura sottostante:

Èsempio grafico di menu con dialog
Ecco come puo comparire un menu fatto con dialog

Il comando, simile a quello delle radiolist viste nella puntata precedente, per mostrare la schermata in figura é il seguente:

dialog --backtitle "Italialinux dialog course" \
                 --title "Lezione 4" \
                 --menu "Selezionare un opzione" 0 0 3 \
                 item1 "Italialinux.com" \
                 item2 "osdev.it" \
                 item3 "dreamos.org"

 

Dove:

  • –backtitle Da il titolo alla schermata (quello sullo sfondo blu)
  • –title Da il titolo alla finestra
  • –menu mostra appunto il menú. Quelli che seguono sono tutti parametri da passare all’opzione –menu.

Di seguito i singoli parametri passati all’opzione –menu

  • “Selezionare un opzione” – Indica il testo da mostrare all’interno della finesta prima delle opzioni
  • I numeri 0 0 3 indicano nell’ordine: larghezza altezza e numero di elementi che avrá il menú. In tutti e 3 i casi il valore 0 equivale ad una scelta automatica del programma.
  • item1 “Italialinux.com” (allo stesso modo anche gli altri 2) invece sono le voci del menú dove Item1 é il nome della voce (quello a sinistra nella figura) e “Italialinux.com” invece é una didascalia (Ricordate che bisogna usare le virgolette nel caso che la frase sia composta da piú di una parola).

Ora vediamo i valori di ritorno dell’applicazione, e come leggerli:

  1. Il valore di ritorno dell’applicazione si trova nella variabile $? E puó essere 0 o 1 che indicano rispettivamente la pressione di Ok o di Cancel. Il valore scelto invece viene inserito in $?, quindi per leggerlo dobbiamo leggere il conenuto di $?
  2. Se invce vogliamo sapere quale voce é stata selezionata, questo valore é inserito dentro STDERR. Il miglior modo per leggerlo é redirezionare l’output di stderr su su file. Quindi aggiungiamo il redirect al comando visto sopra e otterremo:
    dialog --backtitle "Italialinux dialog course" \
                     --title "Lezione 4" \
                     --menu "Selezionare un opzione" 0 0 3 \
                     item1 "Italialinux.com" \
                     item2 "osdev.it" \
                     item3 "dreamos.org" 2> nomefile

Quindi a questo punto non ci resta che leggere il contenuto di nomefile per sapere quale voce é stata scelta. Il contenuto del file sará il nome della voce a menu (quindi nell’esempio avremo item1 o item2 o item3):

SCELTA=`cat nomefile`
echo $SCELTA

Cosí abbiamo visto come creare un menú con le interfacce dialog, e come elaborare la scelta dell’utente. Ovviamente in uno scenario normale, non ci saremmo limitati allo scrivere la scelta dell’utente, ma molto probabilmente avremo usato un costrutto tipo if…else o switch per far esseguire le opportune operazioni al programma in base alla scelta dell’utente.

Con questo mi fermo qua, alla prossima lezione sulle dialog.

2 thoughts on “Dialog lezione 4 – Creazione di un menu”

    1. Ciao scusa la risposta solo 4 mesi dopo, non credo sia molto difficile ho appena controllato l’help di dialog e ha l’opzione –calendar, prova:

      “dialog –title “test” –calendar 11 05 2021″

      per creare un menu completo che intendi?
      Ti puoi vedere lo script che feci come esperimento su minix per un installer basatao su dialog:

      https://github.com/inuyasha82/minix/blob/8b1489e727789337e118cda70c2a3401f1a9fdca/commands/setup-gui/setup-gui.sh

      Dove uso un po di tutto!

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.