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

Guida Gtk+ a puntate ( X parte )

Eccoci ritrovati alla decima puntata, e manca ancora tanto tanto.. ma pian pianino ce la faremo. Come avevo promesso in questa puntata ci occupiamo delle tabelle.

Aprite il vostro editor e compilatore, preparate il vostro quadernetto con gli appunti che iniziamo!

Tabelle

Una tabella penso sappiate tutti cosa sia, un riquadro composto da un tot di righe e un tot di colonne. Questo tipo di contenitore è molto comodo nel caso si debbano allineare molti widget senza stare ad impazzire con 1000 box, ad esempio se si sta scrivendo una calcolatrice.

Bene l’utilizzo è molto semplice, non vi mostro la funzione “easy” per aggiungere i vari widget perché la maggiorparte delle volte crea solo obbrobri.. vi mostro invece la procedura con la funzione relativamente difficile che vi consiglio di usarel’80% delle volte.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <gtk/gtk.h>
 
int main (int argc, char *argv[])
{
 GtkWidget *window, *table, *button;
 int rows, cols;
 
 gtk_init (&argc, &argv);
 
 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
 gtk_window_set_title (GTK_WINDOW (window), "Ciao Tabelle!");
 gtk_container_set_border_width (GTK_CONTAINER (window), 3);
 
 table = gtk_table_new (4, 3, TRUE);
 gtk_container_add (GTK_CONTAINER (window), table);
 
 for ( rows = 0; rows < 4; rows++ ) {
       for ( cols = 0; cols < 3; cols++ ) {
             button = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
             gtk_table_attach (GTK_TABLE (table), button, cols, cols + 1,
                               rows, rows + 1, GTK_FILL | GTK_EXPAND,
                               GTK_FILL | GTK_EXPAND, 0, 0);
             g_signal_connect (G_OBJECT (button), "clicked",
                               G_CALLBACK (gtk_main_quit), NULL);
       }
 }
 
 gtk_widget_show_all (window);
 g_signal_connect (G_OBJECT (window), "delete_event",
                   G_CALLBACK (gtk_main_quit), NULL);
 
 gtk_main ();
 return 0;
}

 

Con questo codice abbiamo la seguente tabella:

ciao_tabelle.png

Ok iniziamo a spiegare i vari punti:

1
 table = gtk_table_new (4, 3, TRUE);

Con questa funzione si crea una nuova tabella, i parametri sono in ordine: il numero di righe, il numero di colonne, se riservare a tutte le celle lo stesso spazio.

1
2
3
  gtk_table_attach (GTK_TABLE (table), button, cols, cols + 1,
                    rows, rows + 1, GTK_FILL | GTK_EXPAND,
                    GTK_FILL | GTK_EXPAND, 0, 0);

Questa era la funzione difficile di cui vi parlavo, quello che fa paura è il numero di parametri.. ma andiamo a vederli nello specifico ;)

  1. La tabella in cui inserire il widget
  2. Il widget da inserire
  3. Posizione della colonna di partenza
  4. Posizione della colonna finale
  5. Posizione della riga di partenza
  6. Posizione della riga finale
  7. Attributi dell’ancoraggio orizzontale
  8. Attributi dell’ancoraggio verticale
  9. Padding ( Ovvero spazio in pixel ) aggiuntivo da riservare orizzontalmente
  10. Padding aggiuntivo da riservare verticalmente

Ok, scommetto che non vi sono chiari i punti dal 3 al 6 se vi sono chiari pazienza, spiego ugualmente.

Dovete immaginarvi la tabella in questo modo:

tabella_teorica.png

Il widget iniziale quindi partirà dalla colonna\riga 0 e finirà alla colonna\riga 1 indi x(0,1)\y(0,1), il secondo widget x(1,2)\y(0,1) e così via..

Ora ritornando ai parametri che richiede la funzione gtk_table_attach mi soffermerei due secondi sui punti 7 e 8. ovvero sugli attributi che possono essere dati. Bene gli attributi possono essere usati contemporaneamente unendoli tramite OR ( | ) e sono:

  • GTK_FILL: Fa in modo che il widget sia “incollato” alla colonna precedente
  • GTK_EXPAND: Dà la possibilità al widget di espandersi adattandosi alle dimensioni della cella.
  • GTK_SHRINK: Richiede al widget di occupare il minor posto possibile all’interno della cella.

Abbiamo concluso con le tabelle, l’ultima cosa da sapere è che si può settare uno spazio di default tra le varie celle tramite le funzioni: gtk_table_set_row_spacings e gtk_table_set_col_spacings dando come primo parametro la tabella e come secondo lo spazio in pixel che si vuole impostare alle varie righe o colonne.

Fine Decima Puntata
OOooooook, vi aspetto nella prossima puntata così concludiamo veramente e definitivamente l’argomento Contenitori, e passiamo a cosa più stimolanti come i pulsanti!
Ciauz ;)

  1. luky
    1 giugno 2009 a 22:50 | #1

    wow questa l’ho capita tutta…..^.^

  1. Nessun trackback ancora...