C(99) gtk 02 - disporre gli oggetti

  • 38 views
Uploaded on

Come disporre gli oggetti nelle GTK, uno sguardo sui principali metodi di disposizione : …

Come disporre gli oggetti nelle GTK, uno sguardo sui principali metodi di disposizione :
HBox-VBox
Fixed
Table

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
38
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
5
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. * http://corsogtk.chipsy.it/ Disporre gli oggetti
  • 2. *
  • 3. * Dato che inserendo tanti oggetti nella finestra uno dopo l’altro quello che otterremo sarebbe una disposizione totalmente insensata e brutta da vedere, son nati per questo vari widget il cui unico scopo è aiutarci a disporre gli elementi :* I BOX : HBOX e VBOX servono per disporre al loro interno i widget in maniera ordinata e in una delle due direzioni scelte (orizzontale o verticale)* FIXED, dentro questo elemento possiamo mettere dei widget in delle coordinate precise, possiamo disporli anche uno sopra l’altro, per creare un gioco è il migliore.
  • 4. *
  • 5. * Per creare questi 2 widget dobbiamo usare :mio_h_oggetto = gtk_hbox_new(gboolean homogeneous,gint spacing);mio_v_oggetto = gtk_vbox_new(gboolean homogeneous,gint spacing);Il primo parametro è se vogliamo che gli oggetti al suo interno sianodisposti in maniera omogenea.Il secondo parametro è lo spazio che deve esserci tra un oggetto el’altro.Dentro questi widget possiamo metterci tutti i widget che vogliamo eanche altri hbox o vbox.Volendo si potrebbe benissimo creare una tabella di hbox e vbox, manon avrebbe senso visto che esiste già il widget table.
  • 6. Dopo averli creati sicuramente vorremmo inserirci del contenuto dentro.Per fare questo dobbiamo usare le funzioni (identiche in entrambi) :gtk_box_pack_start(GTK_BOX(HVBOX), widget, espandi, riempi, 0);gtk_box_pack_end(GTK_BOX(HVBOX), widget, espandi, riempi, 0);La prima funzione inserisce un widget all’inizio del contenitore, mentre laseconda lo inserisce alla fine.1. Il primo parametro è il contenitore in cui vogliamo mettere il widget, deve essere fatto il cast a GTK_BOX visto che è il padre dei due fratellini HBOX e VBOX.2. Il secondo parametro è il widget che vogliamo mettere nel contenitore.3. Il terzo parametro è un gboolean (TRUE / FALSE) e indica se vogliamo che l’elemento riempia il contenitore in larghezza nelle VBOX e in altezza nelle HBOX4. Il quarto parametro che funziona solo se il terzo è TRUE, riempie anche nell’altra dimensione5. Il quinto parametro è quanto spazio deve esserci tra il widget e il contenitore (in ogni dimensione)
  • 7. * In questa immagine il primo bottone èstato inserito con gli argomenti TRUE,FALSEgli altri con gli argomentiTRUE,TRUE
  • 8. *
  • 9. * Questo è il componente che più è consigliato per la realizzazione di giochi in cui abbiamo degli oggetti in movimento.Per crearlo dobbiamo usare :contenitore_fixed = gtk_fixed_new();* E per inserire oggetti al suo interno :gtk_fixed_put(contenitore_fixed,widget,x,y);Il primo parametro è il contenitore in cui inserire il widget,Il secondo il widget da inserireE il terzo e quarto le coordinate.Analogamente per spostare un widget :gtk_fixed_move(contenitore_fixed,widget,x,y);
  • 10. *
  • 11. * Le tabelle, beh non c’è bisogno di spiegare cosa sono, vediamo un po’ come usarle :Crearle :tabella = gtk_table_new(righe, colonne, OMOGENEA);Primo e secondo parametro son il numero di righe e colonne.Il terzo parametro è se deve essere omogenea, ovvero tutte lerighe con la stessa altezza e tutte le colonne con la stessalarghezza.Per inserire :gtk_table_attach_defaults(tabella, widget, colonna_a,colonna_b, riga_a, riga_b );Primo e secondo parametro son contenitore e widget dainserire.Terzo e quarto parametro tra quali colonne deve stare(si potete mettere un widget che occupa anche più diuna colonna)Quinto e sesto tra quali righe.
  • 12. * Ultima cosa sulle tabelle :Se vogliamo impostare lo spazio che deve esserci tra unariga e l’altra usiamo :gtk_table_set_row_spacings(tabella, 2);Tra una riga e l’altra :gtk_table_set_col_spacings(tabella, 2);
  • 13. *
  • 14. #include <gtk/gtk.h>int main(int argc,char *argv[]) { GtkWidget *win,*hbox,*vbox; //Inizializzo le GTK gtk_init (&argc, &argv); //Creo la finestra win = gtk_window_new(GTK_WINDOW_TOPLEVEL); //Creo un vbox vbox = gtk_vbox_new(TRUE, 20); //Inserisco dentro il vbox una label, le vedremmo più avanti gtk_box_pack_start(GTK_BOX(vbox), gtk_label_new("Sopra"), TRUE, TRUE, 0); //Creo un hbox hbox = gtk_hbox_new(TRUE, 50); //Inserisco dentro lhbox due label, le vedremmo più avanti gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new("Sinistra"), TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new("Destra"), TRUE, TRUE, 0); //Inserisco dentro il vbox, lhbox gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); //Inserisco il vbox dentro la finestra gtk_container_add(GTK_CONTAINER(win),vbox); //Mostro la finestra e tutto il suo contenuto gtk_widget_show_all(win); //Avvio il loop principale delle GTK * gtk_main (); return 0;}
  • 15. #include <gtk/gtk.h>int main(int argc,char *argv[]) { GtkWidget *win,*tabella; int i,j; char s[4][4][2] = {{"7","8","9","+"},{"4","5","6","-"},{"1","2","3","*"},{".","0","%","/"}}; //Inizializzo le GTK gtk_init (&argc, &argv); //Creo la finestra win = gtk_window_new(GTK_WINDOW_TOPLEVEL); //Creo una tabella 4x4 tabella = gtk_table_new(4, 4, TRUE); //La riempio con dei label for (i=0;i<4;i++) for (j=0;j<4;j++) gtk_table_attach_defaults(tabella,gtk_button_new_with_label(s[j][i]), i, i+1, j, j+1 ); //Inserisco la tabella dentro la finestra gtk_container_add(GTK_CONTAINER(win),tabella); //Mostro la finestra e tutto il suo contenuto gtk_widget_show_all(win); //Avvio il loop principale delle GTK * gtk_main (); return 0;}
  • 16. #include <gtk/gtk.h>int main(int argc,char *argv[]) { GtkWidget *win,*fixed; int i; //Inizializzo le GTK gtk_init (&argc, &argv); //Creo la finestra win = gtk_window_new(GTK_WINDOW_TOPLEVEL); //Imposto le dimensione della finestra gtk_widget_set_size_request (win,640,480); //Creo un fixed fixed = gtk_fixed_new(); //Ci metto dei label in posizioni a caso for (i=0;i<10;i++)gtk_fixed_put(fixed,gtk_label_new("Ciao!"),rand()%640,rand()%480); //Inserisco il fixed dentro la finestra gtk_container_add(GTK_CONTAINER(win),fixed); //Mostro la finestra e tutto il suo contenuto gtk_widget_show_all(win); //Avvio il loop principale delle GTK gtk_main (); * return 0;}