Mar 112011
 

Oggi voglio mostrarvi alcuni esempi fatti con Zenity .

Zenity è un programma multipiattaforma che permette l’esecuzione di finestre di dialogo GTK + da riga di comando e script di shell.

Come strumenti quali whiptail e dialog, zenity permette una facile creazione di interfacce grafiche, anche se ha meno funzionalità rispetto a strumenti più complessi di creazione di GUI: “Altri linguaggi di scripting come Perl e Python possono essere usati per costruire su applicazioni GUI complete, ma il programma zenity permette ad uno script di shell di interagire con un utente tramite una GUI. L’interfaccia utente non è così raffinata come quella che potrebbe essere fornita da una applicazione con tutte le funzionalità di un GUI, ma è perfettamente adatta per le semplici interazioni. “



Uso base

Quando scrivete degli script, è possibile utilizzare Zenity per creare semplici finestre di dialogo che interagiscono graficamente con l’utente, come segue:

  • È possibile creare una finestra di dialogo per ottenere informazioni da parte dell’utente. Ad esempio, è possibile richiedere all’utente di selezionare una data da un dialogo con un calendario, o per selezionare un file da una finestra di selezione file.
  • È possibile creare una finestra di dialogo per fornire all’utente informazioni. Ad esempio, è possibile utilizzare una barra di avanzamento  per indicare lo stato attuale di una operazione, oppure utilizzare un messaggio di avviso di dialogo per avvertire l’utente.

Quando l’utente chiude la finestra di dialogo, Zenity stampa il testo prodotto dal dialogo sullo standard output.

Message Box

Zenity può creare quattro tipi di box per dare un messaggio:

  • Errore (–error)
  • Informazione (–information)
  • Domanda (–question)
  • Avvertimento (–warning)

Per ogni tipo, usare l’opzione –text per specificare il testo visualizzato nel box.

Esempi:

Far apparire una richiesta con una domanda:

zenity --question --title="Linuxaria introduction to Zenity" --text "Are you sure you want to shutdown?"

Linuxaria introduction to Zenity_002

Box per l’inserimento

Utilizzare l’opzione –entry per creare una finestra di dialogo che supporti l’immissione di testo. Zenity restituisce il contenuto della voce di testo sullo standard output.
La finestra di dialogo di immissione testo supporta le seguenti opzioni:

–text=text
Specifica il testo che viene visualizzato nella finestra di dialogo di immissione del testo.

–entry-text=text
Specifica il testo che viene visualizzato nel campo di immissione della finestra di dialogo di immissione testo.

–hide-text
Nasconde il testo che viene inserito.

Esempio:

#!/bin/sh
        if zenity --entry 
        --title="Add an Entry" 
        --text="Enter your password:" 
        --entry-text "password" 
        --hide-text
          then echo $?
          else echo "No password entered"
        fi

Box per immettere del testo

Usate l’opzione –entry una finestra in cui inserire del testo. Zenity restituisce il contenuto della finestra di testo sullo standard output.

La finestra di dialogo di immissione testo supporta le seguenti opzioni:

–text=text
Specifica il testo che è mostrato in questa finestra di immissione testo.

–entry-text=text
Specifica il testo che viene visualizzato nel campo di immissione della finestra di immissione testo.

–hide-text
Nasconde il testo nel campo di immissione della finestra di dialogo.

zenity-entry-screenshot.png.enEsempio:

#!/bin/sh
 
        if zenity --entry 
        --title="Add an Entry" 
        --text="Enter your _password:" 
        --entry-text "password" 
        --hide-text
          then echo $?
          else echo "No password entered"
        fi

Box con progressione

Lo scopo di questo dialogo di stato è quello di mostrare una progressione di una routine.
Zenity legge i dati dalla linea di standard input per riga. Se una linea è preceduto da #, il testo è mostrato è aggiornato con il testo su quella linea. Se una riga contiene solo un numero, la percentuale è aggiornata con quel numero.

La finestra di avanzamento supporta le seguenti opzioni:

–text=text
Specifica il testo che è mostrato in questa finestra di progressione

–percentage=percentage
Specifica la percentuale iniziale da cui parte la barra di avanzamento.

–auto-close
Chiude automaticamente la finestra quando raggiunge il 100%.

–pulsate
Specifica che la barra di avanzamento pulsa fino a quando un carattere EOF viene letto dallo standard input.



Box per selezionare File

La finestra di selezione di file è una delle una finestra di dialogo zenity più utili, supporta l’apertura di file o il salvataggio file.
Utilizzare l’opzione –file-selection per creare una finestra di selezione file. Zenity restituisce i file selezionati o directory sullo standard output. La modalità predefinita della finestra di selezione file è l’apertura.

La finestra di selezione file supporta le seguenti opzioni:

–filename=filename
Specifica il file o la directory che viene selezionata nella finestra di selezione file quando il dialogo viene mostrato.

–multiple
Consente la selezione di nomi di file multipli nella finestra di selezione file.

–directory
Consente solo la selezione delle directory nella finestra di selezione file.

–save
Impostare la finestra di selezione file in modalità di salvataggio.

–separator=separator
Specifica la stringa che viene utilizzata per dividere l’elenco di nomi di file restituiti.

#!/bin/sh
 
        FILE=`zenity --file-selection --title="Select a File"`
 
        case $? in
                 0)
                        echo ""$FILE" selected.";;
                 1)
                        echo "No file selected.";;
                -1)
                        echo "No file selected.";;
        esac

zenity-fileselection-screenshot.png.en

Altri esempi:

Lanciate il vostro programma con un parametro

A volte si lancia sempre un programma con la necessità di scegliere un file da aprire, quindi perché non disporre di un box che ne fa subito richiesta?

mousepad $(zenity --file-selection)

Google Chrome selettore di profilo

Semplice gestore dei profili per Google Chrome utilizza zenity per l’ingresso del nome del profilo. Inserire questo in uno script di shell e quindi utilizzare il percorso come il campo del comando in un collegamento di gnome/kde. Quando si avvia vi verrà chiesto che profilo utilizzare, se si lascia in bianco si dovrebbe ottenere il profilo predefinito.

/opt/google/chrome/google-chrome --user-data-dir=$HOME/.config/google-chrome/`zenity 
--entry --text="Enter a profile name:"`

Shutdown Box

Vuoi realizzare il tuo tasto di spegnimento?
Basta usare qualcosa di simile a questo (usare l’opzione –question e verificare se l’utente ha spinto su Ok).

#!/bin/sh
# Say bye to shutdown your pc
 
#uses zenity to ask first.
zenity --question --title "Shutdown Confirmation" 
--text "Are you sure you want to shutdown?"
 
if [ "$?" -eq "0" ]
then
        # Do shutdown at here.
        #Ubuntu probably needs gksudo instead of sudo
        sudo init 0;
fi

Semplice editor di testo
Un altro grande esempio trovato su http://www.tildehash.com/?article=advanced-application-shortcuts-with-zenity

Questo esempio visualizza una finestra di browsing del file da cui è possibile selezionare un file da modificare, si apre quindi una finestra di casella di testo dove è possibile digitare o incollare il testo, quando si clicca su “Close” un’altra finestra di navigazione dei file viene visualizzata in cui è possibile selezionare il file in cui si desidera salvare le modifiche, può essere il file originale, un file diverso, o un file inesistente.

#!/bin/bash
zOpenPath="$(zenity --file-selection)"
if [ "$zOpenPath" != "" ]
 then
  zData=$(cat "$zOpenPath")
  zNewData=$(echo -n "$zData" | zenity --text-info --editable --width 650 --height 400)
  zSavePath=$(echo -n "$(zenity --file-selection --filename="$zOpenPath" --save --confirm-overwrite)")
  echo -n "$zNewData" > "$zSavePath"
fi

Riferimenti:

Sito Zenity: http://library.gnome.org/users/zenity/
Advanced application launcher with Zenity: http://www.tildehash.com/?article=advanced-application-shortcuts-with-zenity

Popular Posts:

flattr this!

  5 Responses to “Introduzione a zenity”

  1. Hi,

    I like the GTK Theme of the two first screenshots (where there are the – + x buttons on the top right corner). Can you please give me the name of that theme?

    Thanks

  2. It seems that zenity is no longer developed.

    Better to practice with yad instead:

    http://code.google.com/p/yad/

    latest debian binary:

    http://www.bollati.info/kaspar/yad_0.9.0-1_i386.deb

    • Innocent i use Xubuntu 10.10, and i use the default theme ;)

      kasper, thanks for the tip i’ll check that for sure

  3. Great article! I’ve been hooked on Zenity lately, so I really find this stuff useful.

    By the way, why aren’t the URLs for Zenity’s website and the one for my “Advanced Application Launchers With Zenity” article not hyperlinks? Most people don’t want to copy and paste :)

 Leave a Reply

(required)

(required)


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>