headermask image

header image

Aggiungere interfacce grafiche agli script shell #2

Nella prima parte abbiamo visto come porre una semplice domanda e come notificare all’utente lo stato dell’esecuzione in uno script shell.

In questa seconda parte ci occuperemo della possibilità offerta da Zenity di manipolare l’input e l’output di testo.

Per avere un input dall’utente in forma di testo scritto, l’opzione da usare è --entry, in questo modo:


$ zenity --entry --title="Un input di testo" --text="Inserisci qualcosa"

Il cui risultato è:

Zenity Entry Dialog 1

Possiamo decidere la dimensione della finestra di dialogo con l’opzione --width=N dove N è la larghezza totale in pixel, e possiamo fornire un testo predefinito già inserito nella casella con l’opzione --entry-text=stringa, come in questo esempio:


$ zenity --entry --width=300 --title="Un input di testo" --text="Inserisci qualcosa" --entry-text="Questo è già dentro"

Il cui risultato è:

Zenity Entry Dialog 2

Il testo digitato viene stampato nello standard output alla pressione del pulsante OK, mentre niente viene restituito se si preme il pulsante Annulla. Contestualmente, il valore di ritorno è zero (true) se si preme OK e diverso da zero se si preme annulla o si chiude la finestra dal pulsante nella barra del titolo.

Ecco un pezzetto di codice in Bash che distingue fra le varie situazioni:


#!/bin/bash

# mostra la finestra di dialogo e assegna quello che zenity manda allo
# standard output alla variabile "varstringa"
# notare i "backtick" -> ` `
varstringa=`zenity --entry --width=300 --title="Zenity: input di testo" --text="Inserisci qualcosa"`

# prende il valore di ritorno del comando precedente
ritorno=$?

# controlla se si è premuto OK o Annulla
if [ "$ritorno" -ne 0 ]; then
  # è stato premuto annulla o chiusa la finestra
  zenity –warning –title=”Test di Zenity” –text=”Hai annullato”
  exit 1
else
  # è stato premuto OK
  zenity –info –title=”Test di Zenity” –text=”Hai scritto: ‘$varstringa’”
fi

Il codice è anche qui.

Una ulteriore opzione, --hide-text, permette di nascondere il testo durante la digitazione come durante l’inserimento di una password:


$ zenity --entry --title="Input nascosto" --text="Inserisci una password" --hide-text

Il cui risultato, digitando qualcosa, è:

Zenity Entry Dialog 3

Se invece di una singola riga vogliamo mostrare un testo lungo, come ad esempio un file di log, l’opzione da usare è --text-info, nella sua forma più semplice:


$ zenity --text-info --title="Vedere un intero file" --filename zenity-entry-02

che mostra il file zenity-entry-02 all’interno di una finestra:

Zenity Text 1

L’opzione --filename permette di specificare un file da mostrare. Se si vuole poter cambiare il contenuto mostrato si può usare l’opzione --editable che consente modifiche al testo mostrato, con queste limitazioni:

  • Non si ha praticamente nessuna funzione avanzata di editing.
  • Le righe troppo lunghe vengono spezzate solo a video, mandandole a capo. Nell’output rimangono invece integre.
  • Il file non viene modificato. Il testo completo viene stampato sullo standard output, e tocca a noi catturarlo e dirigerlo su un altro file.

Se poi avete esperienza di shell script saprete anche che usando questo comando:


$ zenity --text-info --filename zenity-entry-02 --editable > zenity-entry-02

si giunge ad un risultato ben diverso da quello atteso: il file zenity-entry-02 viene svuotato del contenuto e la finestra di Zenity viene mostrata vuota, perché nella ridirezione dell’output il file zenity-entry-02 viene aperto in scrittura e troncato a zero byte prima di eseguire il comando Zenity.

Il testo mostrato può anche essere fornito dinamicamente:


$ find / -name "*.pdf" | zenity --text-info --title="I file pdf sul tuo disco" 

che produce questo:

Zenity Text 2

con la lista dei file PDF che viene allungata man mano che il comando find ne trova altri.

Per ora chiudiamo qui, ma Zenity ci riserva molte altre sorprese.

Se ti piace quello che scrivo registrati al feed RSS

One Comment

  1. Mi chiedo se non era più semplice parlare di kdialog o xdialog che sono già implementate sul sistema invece di usare addirittura un’altra utility per fare le gui…
    In ogni caso bellissimo articolo

    1. Falozzo on 9 Aprile 2008 at 23:07

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*
  • Licenza

    Creative Commons License
    Questo sito e tutti i suoi contenuti sono pubblicati sotto una Licenza Creative Commons, quando non diversamente specificato.

    Per altri usi, basta contattarmi.

  • Argomenti

  • Archivio mensile

  • Spazio offerto da

  • Alzate d'ingegno

    D: invece di usare il solito software pirata, hai provato OpenOffice?

    R: ho provato più volte a scaricarlo da Emule, ma ha sempre problemi.

  • Amici

  • Buonumore

  • Da leggere

  • Sicurezza e computer

  • Adesivi