Home > Guide veloci, programmazione > Guida Gtk+ a puntate ( XIII parte )

Guida Gtk+ a puntate ( XIII parte )

Dopo un lungo momento di silenzio a causa della scrittura della documentazione per Imel, continuiamo la nostra guida alle Gtk+. In questa puntata vedremo i label, loro uso e “consumo” :)

Del testo con delle Gtk+.. ( GtkLabel )

Un label altro non è che un testo, o una stringa, che si può visualizzare all’interno di un’interfaccia grafica realizzata con le Gtk+.

Un label minimale, ovvero del testo senza alcun effetto è semplicissimo da creare:

1
2
3
GtkWidget *label;
 
label = gtk_label_new ("Salve, sono un label!");

Il codice mi sembra che sia abbastanza esplicito e non abbia bisogno di commenti, andiamo invece ora a vedere come si può creare un label più ricercato. Ovvero con un colore diverso e in grassetto.

1
2
3
4
GtkWidget *label;
 
label = gtk_label_new (NULL);
gtk_label_set_markup (GTK_LABEL (label), "<span color=\"#990000\" weight=\"bold\">Ciao, io sono un label con markup!</span>");

Dunque il markup che abbiamo usato è molto simile all’html, ed è il così chiamato “Pango Text Attribute Markup Language” i cui tag possono essere trovati in questa pagina.

 

Passiamo ora un attimo agli attributi che può avere un label:

  • Selezionabile: Un label può essere, o meno, selezionabile dall’utente. Per stabilire esplicitamente questa opzione si può ricorrere alla funzione gtk_label_set_selectable che riceve come primo argomento il label a cui impostare l’opzione, e come secondo TRUE o FALSE dipendentemente dall’attributo che gli si vuol dare.
  • Giustificabile:Il testo di un label, se composto da più righe, può essere posto tutto a sinistra ( GTK_JUSTIFY_LEFT ), tutto al centro ( GTK_JUSTIFY_CENTER ), tutto a destra ( GTK_JUSTIFY_RIGHT ) o distribuito per tutta la linea ( GTK_JUSTIFY_FILL ).
    Quest’operazione può venire eseguita tramite la funzione gtk_label_set_justify che riceve come primo parametro il label a cui eseguire l’operazione e come secondo il tipo di giustificazione da dargli.
  • Compresso: Ovvero, se il label ha una lunghezza superiore a quella del contenitore viene compattato aggiungendo tre puntini nel punto in cui è stato compresso. Questo non va a influire su quando il label viene copiato in quanto nella clipboard verrà inserito tutto il testo del label e non la sua versione compressa. La funzione per far ciò è gtk_label_set_ellipsize che riceve come primo argomento il label a cui applicare l’operazione e come secondo argomento il punto in cui fare la compressione che può avvenire: all’inizio ( PANGO_ELLIPSIZE_START ), al centro ( PANGO_ELLIPSIZE_MIDDLE ) e alla fine ( PANGO_ELLIPSIZE_END ).
  • Spezzato: Se una riga di un label supera la lunghezza del contenitore può venire spezzato mandando a capo le parole, o i caratteri, che superano la lunghezza. La funzione in questo caso è gtk_label_set_line_wrap_mode per impostare il tipo di “spezzamento” e gtk_label_set_line_wrap per abilitarlo. Tutte e due le funzioni ricevono come primo parametro il label a cui applicare l’effetto, come secondo parametro invece la prima può ricevere i seguenti parametri: PANGO_WRAP_WORD ( per mandare a capo le parole in eccesso ), PANGO_WRAP_CHAR ( per mandare a capo i caratteri in eccesso ), PANGO_WRAP_WORD_CHAR ( per mandare a capo le parole in eccesso dove possibile, se non è possibile perchè una sola parola è troppo lunga manda a capo i caratteri in eccesso ). La seconda funzione riceve invece come secondo parametro TRUE se si vuol utilizzare il WRAP del testo, altrimenti FALSE.
  • Ruotato: Si può anche dare un’inclinazione al label da 0° a 90°  tramite la funzione gtk_label_set_angle, che riceve come primo argomento il label a cui applicare la rotazione e come secondo argomento l’angolo di rotazione in double.

Esistono anche dei segnali collegabili ad un label e sono i seguenti, il più utile tra questi è “copy-clipboard” che viene inviato quando il testo di un label viene copiato ( associato di solito alla scorciatoia CTRL + C ).

Fine Tredicesima Puntata
Anche questa è fatta, a questo punto penso che ci siano le basi per iniziare a creare delle interfacce grafiche minimali per i vostri programmi. Alla prossima.

Ciauz ;)

  1. Anonimo
    14 maggio 2009 a 20:59 | #1

    Complimenti..per questa guida..quando avrò tempo studierò qui =)

  1. Nessun trackback ancora...