Durante lo sviluppo di una applicazione, potreste avere bisogno di aggiungere più oggetti in una finestra. L'esempio precedente ha usato solamente un widget e abbiamo utilizzato semplicemente una chiamata alla funzione
gtk_container_add()
per "impacchettare" il widget dentro la finestra.Ma quando avete bisogno di aggiungere più oggetti in una finestra, diviene importante controllare in che modo ogni widget deve essere posizionato e dimensionato. Ecco a cosa serve l'impacchettamento. GTK+ contiene una vasta collezione di containers la cui funzione è quella di controllare il layout dei widget figli aggiunti alla finestra. Vedi Layout Containers per una visione generale.
L'esempio seguente mostra come il container GtkGrid vi permette di sistemare i tasti: ecco a voi il famoso Hello World in GTK+:#include <gtk/gtk.h> static void print_hello (GtkWidget *widget, gpointer data){ g_print ("Hello World\n"); } int main (int argc, char *argv[]){ GtkWidget *window; GtkWidget *grid; GtkWidget *button; /* Questa è una funzione di callback. Gli argomenti da riga di comando * vengono ignorati in questo esempio. Se ne parlerà più avanti di queste funzioni. */ gtk_init (&argc, &argv); /* crea una nuova finestra e imposta il titolo */ window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (window), "Grid"); g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL); gtk_container_set_border_width (GTK_CONTAINER (window), 10); /* Qui creiamo il container per impacchettare i vari widget */ grid = gtk_grid_new (); /* aggiunge il container alla finestra */ gtk_container_add (GTK_CONTAINER (window), grid); button = gtk_button_new_with_label ("Button 1"); g_signal_connect (button, "clicked", G_CALLBACK (print_hello), NULL); /* Posiziona il primo tasto nella cella (0, 0), e gli fa occupare * solo 1 cella orizzontalmente e verticalmente */ gtk_grid_attach (GTK_GRID (grid), button, 0, 0, 1, 1); button = gtk_button_new_with_label ("Button 2"); g_signal_connect (button, "clicked", G_CALLBACK (print_hello), NULL); /* Posiziona il secondo tasto nella cella (1, 0), e gli fa occupare * solo una cella orizzontalmente and verticalmente */ gtk_grid_attach (GTK_GRID (grid), button, 1, 0, 1, 1); button = gtk_button_new_with_label ("Quit"); g_signal_connect (button, "clicked", G_CALLBACK (gtk_main_quit), NULL); /* Posiziona il tasto Quit(Esci) nella cella (0, 1), e gli fa riempire * 2 colonne. */ gtk_grid_attach (GTK_GRID (grid), button, 0, 1, 2, 1); /* Ora che abbiamo impacchettato i widgets, li mostriamo tutti * in una volta, chimaando gtk_widget_show_all() sulla finestra. * This call recursively calls gtk_widget_show() on all widgets * that are contained in the window, directly or indirectly. */ gtk_widget_show_all (window); /* Tutte le applicazioni GTK+ devono avere un gtk_main(). Il controllo finisce qui * e rimane in attesa di un qualche evento (come la pressione di un tasto * o un evento del mouse) fintantoché gtk_main_quit() viene invocato. */ gtk_main (); return 0; }
Nessun commento:
Posta un commento