⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gtk_tut_it.sgml

📁 gtk是linux一款强大的夸平台的图形化开发工具
💻 SGML
📖 第 1 页 / 共 5 页
字号:
    /* Creiamo la nostra finestra */    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);    /* Ci si dovrebbe sempre ricordare di connettere il segnale di destroy     * alla finestra principale. Cio' e' molto importante per avere un funzionamento     * corretto dal punto di vista intuitivo */    gtk_signal_connect (GTK_OBJECT (window), "delete_event",			GTK_SIGNAL_FUNC (delete_event), NULL);    gtk_container_border_width (GTK_CONTAINER (window), 10);        /* Creiamo una scatola verticale (vbox) in cui impacchettare quelle     * orizzontali. Questo ci permette di impilare le scatole orizzontali     * piene di bottoni una sull'altra in questa vbox. */      box1 = gtk_vbox_new (FALSE, 0);        /* Decide quale esempio si deve mostrare. Corrispondono alle figure precedenti */    switch (which) {    case 1:	/* creare una nuova etichetta. */	label = gtk_label_new ("gtk_hbox_new (FALSE, 0);");	        /* allineare l'etichetta al lato sinistro. Discuteremo questa e altre         * funzioni nella sezione dedicata agli attributi degli oggetti grafici. */	gtk_misc_set_alignment (GTK_MISC (label), 0, 0);   	/* Impacchettare l'etichetta nella scatola verticale (vbox box1).         * Ricordare che gli oggetti che vengono aggiunti in una vbox vengono         * impacchettati uno sopra all'altro in ordine. */	gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0);		/* mostrare l'etichetta */	gtk_widget_show (label);		/* chiamare la nostra funzione make_box - homogeneous = FALSE,         * spacing = 0, expand = FALSE, fill = FALSE, padding = 0 */	box2 = make_box (FALSE, 0, FALSE, FALSE, 0);	gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);	gtk_widget_show (box2);	/* chiamare la nostra funzione make_box - homogeneous = FALSE, spacing = 0,	 * expand = FALSE, fill = FALSE, padding = 0 */	box2 = make_box (FALSE, 0, TRUE, FALSE, 0);	gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);	gtk_widget_show (box2);		/* Gli argomenti sono: homogeneous, spacing, expand, fill, padding */	box2 = make_box (FALSE, 0, TRUE, TRUE, 0);	gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);	gtk_widget_show (box2);		/* Questo crea un separatore. Li conosceremo meglio in seguito,          * comunque sono piuttosto semplici. */	separator = gtk_hseparator_new ();		/* Impacchetta il separatore nella vbox. Ricordare che stiamo impacchettando         * ognuno di questi oggetti in una vbox, cosicch&eacute; essi verranno         * impacchettati verticalmente. */	gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5);	gtk_widget_show (separator);		/* crea un'altra nuova etichetta e mostrala. */	label = gtk_label_new ("gtk_hbox_new (TRUE, 0);");	gtk_misc_set_alignment (GTK_MISC (label), 0, 0);	gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0);	gtk_widget_show (label);		/* Gli argomenti sono: homogeneous, spacing, expand, fill, padding */	box2 = make_box (TRUE, 0, TRUE, FALSE, 0);	gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);	gtk_widget_show (box2);		/* Gli argomenti sono: homogeneous, spacing, expand, fill, padding */	box2 = make_box (TRUE, 0, TRUE, TRUE, 0);	gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);	gtk_widget_show (box2);		/* ancora un nuovo separatore. */	separator = gtk_hseparator_new ();	/* Gli ultimi 3 argumenti per gtk_box_pack_start sono: expand, fill, padding. */	gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5);	gtk_widget_show (separator);		break;    case 2:	/* creare una nuova etichetta, ricordare che box1 e' la vbox creata 	 * vicino all'inizio di main() */	label = gtk_label_new ("gtk_hbox_new (FALSE, 10);");	gtk_misc_set_alignment (GTK_MISC (label), 0, 0);	gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0);	gtk_widget_show (label);		/* Gli argomenti sono: homogeneous, spacing, expand, fill, padding */	box2 = make_box (FALSE, 10, TRUE, FALSE, 0);	gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);	gtk_widget_show (box2);		/* Gli argomenti sono: homogeneous, spacing, expand, fill, padding */	box2 = make_box (FALSE, 10, TRUE, TRUE, 0);	gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);	gtk_widget_show (box2);		separator = gtk_hseparator_new ();	/* Gli ultimi tre arcomenti di gtk_box_pack_start sono: expand, fill, padding. */	gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5);	gtk_widget_show (separator);		label = gtk_label_new ("gtk_hbox_new (FALSE, 0);");	gtk_misc_set_alignment (GTK_MISC (label), 0, 0);	gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0);	gtk_widget_show (label);		/* Gli argomenti sono: homogeneous, spacing, expand, fill, padding */	box2 = make_box (FALSE, 0, TRUE, FALSE, 10);	gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);	gtk_widget_show (box2);		/* Gli argomenti sono: homogeneous, spacing, expand, fill, padding */	box2 = make_box (FALSE, 0, TRUE, TRUE, 10);	gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);	gtk_widget_show (box2);		separator = gtk_hseparator_new ();	/* Gli ultimi tre argomenti di gtk_box_pack_start sono: expand, fill, padding. */	gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5);	gtk_widget_show (separator);	break;        case 3:        /* Questo dimostra la possibilita' di usare use gtk_box_pack_end() per         * giustificare gli oggetti a destra. Per prima cosa creiamo una	 * nuova scatola come prima. */	box2 = make_box (FALSE, 0, FALSE, FALSE, 0);	/* creiamo l'etichetta che sara' aggiunta alla fine. */	label = gtk_label_new ("end");	/* impacchettiamola usando gtk_box_pack_end(), cosa' che viene inserita	 * sul lato destro della hbox creata nella chiamata a the make_box(). */	gtk_box_pack_end (GTK_BOX (box2), label, FALSE, FALSE, 0);	/* mostriamo l'etichetta. */	gtk_widget_show (label);		/* impacchettiamo box2 in box1 (the vbox, ricordate? :) */	gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);	gtk_widget_show (box2);		/* un separatore per il fondo */	separator = gtk_hseparator_new ();	/* Questo assegna esplicitamente al separatore l'ampiezza di 400 pixel	 * e l'altezza di 5 pixel. Cio' fa si' che la hbox che abbiamo creato sia	 * anche essa larga 400 pixel, e che l'etichetta finale sia separata dalle	 * altre etichette nella hbox. In caso contrario, tutti gli oggetti nella	 * hbox sarebbero impacchettati il piu' vicino possibile. */	gtk_widget_set_usize (separator, 400, 5);	/* impacchetta il separatore nella vbox (box1) creata vicino all'inizio 	 * di main() */	gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5);	gtk_widget_show (separator);        }        /* Creare un'altra nuova hbox.. ricordate che ne possiamo usare quante ne vogliamo! */    quitbox = gtk_hbox_new (FALSE, 0);        /* Il nostro bottone di uscita. */    button = gtk_button_new_with_label ("Quit");        /* Configuriamo il segnale per distruggere la finestra.  Ricordate che     * ci&ograve; mander&agrave; alla finestra il segnale "destroy", che verr&agrave; catturato      * dal nostro gestore di segnali che abbiamo definito in precedenza. */    gtk_signal_connect_object (GTK_OBJECT (button), "clicked",			       GTK_SIGNAL_FUNC (gtk_main_quit),			       GTK_OBJECT (window));    /* impacchetta il bottone in quitbox.     * Gli ultimi tre argomenti di gtk_box_pack_start sono: expand, fill, padding. */    gtk_box_pack_start (GTK_BOX (quitbox), button, TRUE, FALSE, 0);    /* impacchetta quitbox nella vbox (box1) */    gtk_box_pack_start (GTK_BOX (box1), quitbox, FALSE, FALSE, 0);        /* impacchetta la vbox (box1), che ora contiene tutti i nostri oggetti,     * nella finestra principale. */    gtk_container_add (GTK_CONTAINER (window), box1);        /* e mostra tutto quel che rimane */    gtk_widget_show (button);    gtk_widget_show (quitbox);        gtk_widget_show (box1);    /* Mostriamo la finestra alla fine in modo che tutto spunti fuori assieme. */    gtk_widget_show (window);        /* E, naturalmente, la nostra funzione main. */    gtk_main ();    /* Il controllo ritorna a questo punto quando viene chiamata gtk_main_quit(),      * ma non quando si usa gtk_exit. */        return 0;}</verb></tscreen><!-- ----------------------------------------------------------------- --><sect1>Impacchettamento con uso di Tabelle<p>Diamo ora un'occhiata ad un altro modo di impacchettare - le Tabelle.In certe situazioni, possono risultare estremamente utili.Usando le tabelle, creiamo una griglia in cui possiamo piazzare gli oggetti.Gli oggetti possono occupare tanti spazi quanti ne specifichiamo.Naturalmente, la prima cosa da vedere &egrave; la funzione gtk_table_new:<tscreen><verb>GtkWidget* gtk_table_new (gint rows,                          gint columns,                          gint homogeneous);</verb></tscreen><p>Il primo argomento rappresenta il numero di righe da mettere nella tabella,mentre il secondo &egrave; ovviamente il numero di colonne.L'argomento homogeneous ha a che fare con il modo in cui le caselle della tabellasono dimensionate. Se homogeneous ha il valore TRUE, le caselle sono ridimensionatefino alla dimensione del pi&ugrave; grande oggetto contenuto nella tabelle. Se &egrave; FALSE, ladimensione delle caselle&egrave; decisa dal pi&ugrave; alto oggetto in una certa riga e dal pi&ugrave;largo oggetto in una stessa colonna.Le righe e le colonne sono disposte a partire da 0 fino a n, dove n &egrave; il numeroche era stato specificato nella chiamata a gtk_table_new. Cos&igrave;, se specificate rows = 2 e columns = 2, lo schema avr&agrave; questo aspetto:<tscreen><verb> 0          1          20+----------+----------+ |          |          |1+----------+----------+ |          |          |2+----------+----------+</verb></tscreen><p>Notate che il sistema di coordinate ha origine nel vertice in alto a sinistra. Permettere un oggetto in una tabella, usate la seguente funzione:<tscreen><verb>void gtk_table_attach (GtkTable      *table,                       GtkWidget     *child,		       gint           left_attach,		       gint           right_attach,		       gint           top_attach,		       gint           bottom_attach,		       gint           xoptions,		       gint           yoptions,		       gint           xpadding,		       gint           ypadding);</verb></tscreen>				       <p>In cui il primo argomento (``table'') &egrave; la tabella che avete creato e il secondo(``child'') &egrave; l'oggetto che volete piazzare nella tabella.Gli argomenti ``attach''  (right, left, top, bottom)  specificano dove mettere l'oggettoe quante caselle adoperare. Se volete mettere un bottone nella casella in basso a destranella nostra tabella 2x2, e volete che esso riempia SOLO quella casella, dovete porreleft_attach = 1, right_attach = 2, top_attach = 1, bottom_attach = 2.Se invece volete che un oggetto si prenda tutta la riga pi&ugrave; in alto nella nostra tabella2x2, dovreste usare left_attach = 0, right_attach =2, top_attach = 0, bottom_attach = 1.Gli argomenti  ``xoptions'' e ``yoptions'' sono usati per specificare le opzioni di impacchettamento;di essi si pu&ograve; fare l'OR in modo di ottenere opzioni multiple.Le opzioni sono:<itemize><item>GTK_FILL - Se la parte di tabella in cui si vuole inserire il widget &egrave; pi&ugrave; grande dell'oggetto, e se si specifica GTK_FILL, l'oggetto viene espanso fino adoccupare tutto lo spazio disponibile.<item>GTK_SHRINK - Se si alloca all'oggetto nella tabella meno spazio del necessario(di solito succede quando l'utente ridimensiona la finestra), allora normalmentel'oggetto verrebbe spinto fuori dal fondo della finestra fino a sparire.Se invece si specifica GTK_SHRINK is specified, gli oggetti si rimpicciolisconoassieme alla tabella.<item>GTK_EXPAND - Questo fa s&igrave; che la tabella si espanda fino ad occupare tutto lo spazio che rimane nella finestra.</itemize>Il riempimento funziona come nelle scatole, con la creazione di un'area vuotaattorno all'oggetto la cui dimensione viene specificata in pixel.La funzione gtk_table_attach() ha UN MUCCHIO di opzioni. Quindi, ecco una scorciatoia:<tscreen><verb>void gtk_table_attach_defaults (GtkTable   *table,                                GtkWidget  *widget,				gint        left_attach,				gint        right_attach,				gint        top_attach,				gint        bottom_attach);</verb></tscreen>Le xoptions e yoptions vengono posti per difetto a GTK_FILL | GTK_EXPAND, e sia xpaddingche ypadding vengono posti a 0. Il resto degli argomenti sono identici a quelli della funzioneprecedente.Ci sono poi le funzioni gtk_table_set_row_spacing() and gtk_table_set_col_spacing().Queste mettono dello spazio fra le righe (o colonne)in corrispondenza di una specificariga (o colonna).<tscreen><verb>void gtk_table_set_row_spacing (GtkTable      *table,                                gint           row,				gint           spacing);</verb></tscreen>e<tscreen><verb>void       gtk_table_set_col_spacing  (GtkTable      *table,                                       gint           column,				       gint           spacing);</verb></tscreen>Notate che per le colonne lo spazio viene posto alla destra della colonna, mentreper le righe lo spazio viene posto al di sotto della riga.Si pu&ograve; poi inserire una spaziatura identica fra tutte le righe e/o colonne usando:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -