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

📄 gtk_tut_it-7.html

📁 gtk是linux一款强大的夸平台的图形化开发工具
💻 HTML
📖 第 1 页 / 共 4 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><HTML><HEAD> <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9"> <TITLE>GTK Tutorial: Alcuni Widget</TITLE> <LINK HREF="gtk_tut_it-8.html" REL=next> <LINK HREF="gtk_tut_it-6.html" REL=previous> <LINK HREF="gtk_tut_it.html#toc7" REL=contents></HEAD><BODY BGCOLOR="#FFFFFF"><A HREF="gtk_tut_it-8.html">Avanti</A><A HREF="gtk_tut_it-6.html">Indietro</A><A HREF="gtk_tut_it.html#toc7">Indice</A><HR NOSHADE><H2><A NAME="s7">7. Alcuni Widget</A></H2><H2><A NAME="ss7.1">7.1 L'Etichetta (Label)</A></H2><P>Le etichette sono molto usate in GTK, e sono relativamente semplici. Leetichette non emettono segnali, dal momento che non hanno una finestraX a loro assegnata. Se avete la necessit&agrave; di avere dei segnali o di faredelle operazioni di clipping, potete usare il widget EventBox.<P>Per creare una nuova etichetta, si usa:<P><BLOCKQUOTE><CODE><PRE>GtkWidget* gtk_label_new (char *str);</PRE></CODE></BLOCKQUOTE><P>In cui l'unico argomento &egrave; la stringa che si vuole sia mostrata.<P>Per cambiare il testo dell'etichetta dopo che &egrave; stata creata, si usala funzione:<P><BLOCKQUOTE><CODE><PRE>void gtk_label_set (GtkLabel  *label,                    char      *str);</PRE></CODE></BLOCKQUOTE><P>in cui il primo argomento &egrave; l'etichetta creata in precedenza (di cui sifa il cast usando la macro GTK_LABEL()), mentre il secondo &egrave; la nuovastringa.<P>Nel caso, lo spazio necessario per la nuova stringa verr&agrave; regolato automaticamente.<P>Per ottenere la stringa corrente si usa:<P><BLOCKQUOTE><CODE><PRE>void gtk_label_get (GtkLabel  *label,                    char     **str);</PRE></CODE></BLOCKQUOTE><P>in cui il primo argomento &egrave; l'etichetta che avete creato, e il secondo&egrave; il valore di ritorno per la stringa.<P><H2><A NAME="ss7.2">7.2 Il Widget Suggerimenti (Tooltips)</A></H2><P>I suggerimenti sono piccole stringhe di testo che spuntano quando lasciate ilpuntatore su un bottone o un altro widget per qualche secondo. Sono piuttostosemplici da usare, per cui ne dar&ograve; la spiegazione senza corredarla di esempi.Se volede vedere un po' di codice, date un'occhiata al programma testgtk.cdistribuito con GTK.<P>Con alcuni widget (per esempio con l'etichetta) i suggerimenti non funzionano.<P>La prima chiamata che si usa per creare un nuovo tooltip &egrave; la seguente.In una data funzione, &egrave; necessario chiamarla una sola volta: il <CODE>GtkTooltip</CODE>che viene restituito da questa funzione pu&ograve; essere usato per creare suggerimentimultipli.<P><BLOCKQUOTE><CODE><PRE>GtkTooltips *gtk_tooltips_new (void);</PRE></CODE></BLOCKQUOTE><P>Una volta creato un nuovo suggerimento e il widget su cui lo volete usare,basta usare la seguente chiamata per fare l'assegnazione:<P><BLOCKQUOTE><CODE><PRE>void gtk_tooltips_set_tip (GtkTooltips *tooltips,                           GtkWidget   *widget,                           const gchar *tip_text,                           const gchar *tip_private);</PRE></CODE></BLOCKQUOTE><P>Il primo argomento &egrave; il suggerimento che era gi&agrave; stato creato, che &egrave; seguitodal widget da cui volete che spunti il suggerimento e dal testo che voletevenga mostrato. L'ultimo argomento pu&ograve; essere posto a NULL.<P>Ecco un piccolo esempio:<P><BLOCKQUOTE><CODE><PRE>GtkTooltips *tooltips;GtkWidget *button;...tooltips = gtk_tooltips_new ();button = gtk_button_new_with_label ("button 1");...gtk_tooltips_set_tips (tooltips, button, "This is button 1", NULL);</PRE></CODE></BLOCKQUOTE>Ci sono anche altre funzioni che si usano con i suggerimenti. Eccone una listacon una breve descrizione di quello che fanno.<P><BLOCKQUOTE><CODE><PRE>void gtk_tooltips_destroy    (GtkTooltips *tooltips);</PRE></CODE></BLOCKQUOTE><P>Distrugge un suggerimento esistente.<P><BLOCKQUOTE><CODE><PRE>void gtk_tooltips_enable     (GtkTooltips *tooltips);</PRE></CODE></BLOCKQUOTE><P>Abilita  un gruppo di suggerimenti disbilitato.<P><BLOCKQUOTE><CODE><PRE>void gtk_tooltips_disable    (GtkTooltips *tooltips);</PRE></CODE></BLOCKQUOTE><P>Disabilita un gruppo di suggerimenti abilitato.<P><BLOCKQUOTE><CODE><PRE>void gtk_tooltips_set_delay  (GtkTooltips *tooltips,                              gint         delay);</PRE></CODE></BLOCKQUOTE>Stabilisce quanti millisecondi si deve mantenere il puntatore sopra alwidget prima che venga mostrato il suggerimento. Il valore di difetto&egrave; di 1000 millisecondi.<P><BLOCKQUOTE><CODE><PRE>void      gtk_tooltips_set_tips (GtkTooltips *tooltips,                                 GtkWidget   *widget,                                 gchar    *tips_text);</PRE></CODE></BLOCKQUOTE><P>Cambia il testo di un suggerimento gi&agrave; esistente.<P><BLOCKQUOTE><CODE><PRE>void gtk_tooltips_set_colors (GtkTooltips *tooltips,                              GdkColor    *background,                              GdkColor    *foreground);</PRE></CODE></BLOCKQUOTE><P>Assegna i colori di primo piano e di sfondo dei suggerimenti. (Non ho ideadi come si specifichino i colori).<P>E questo &egrave; tutto riguardo alle funzioni relative ai suggerimenti. Pi&ugrave;di quanto avreste mai voluto sapere :)<P><P><H2><A NAME="ss7.3">7.3 La Barra di Avanzamento (Progress Bar)</A></H2><P>Le barre di avanzamento sono usate per mostrare lo stato di una operazione. Come potetevedere nel frammento di codice qui sotto, sono piuttosto semplici da usare.Ma prima vediamo come cominciare con la chiamata per creare una nuova progressbar.<P><BLOCKQUOTE><CODE><PRE>GtkWidget *gtk_progress_bar_new (void);</PRE></CODE></BLOCKQUOTE><P>Ora che la barra di avanzamento &egrave; stata creata, possiamo usarla..<P><BLOCKQUOTE><CODE><PRE>void gtk_progress_bar_update (GtkProgressBar *pbar, gfloat percentage);</PRE></CODE></BLOCKQUOTE><P>Il primo argomento &egrave; la barra di avanzamento su cui volete lavorare, e il secondo&egrave; la quantit&agrave; 'completato', cio&egrave; la quantit&agrave; di riempimento della progressbar fra 0 e 100% (un numero reale fra 0 e 1).<P>Le barre di avanzamento sono usate di solito con funzioni di timeout o altre diquesto tipo (vedi alla sezione <A HREF="gtk_tut_it-15.html#sec_timeouts">Timeouts, I/O and Idle Functions</A>) per dare l'illusione del multitasking. Tutteusano la funzione gtk_progress_bar_update nello stesso modo.<P>Ecco un esempio di barra di avanzamento, in cui l'aggiornamento avviene usandodei timeout. Questo codice vi mostra anche come riinizializzare lebarre di avanzamento.<P><BLOCKQUOTE><CODE><PRE>/* progressbar.c */#include &lt;gtk/gtk.h>static int ptimer = 0;int pstat = TRUE;/* Questa funzione incrementa e aggiorna la barra di avanzamento, e la rimette   a zero se pstat &egrave; FALSE */gint progress (gpointer data){    gfloat pvalue;        /* ottiene il valore corrente della status bar */    pvalue = GTK_PROGRESS_BAR (data)->percentage;        if ((pvalue >= 1.0) || (pstat == FALSE)) {        pvalue = 0.0;        pstat = TRUE;    }    pvalue += 0.01;        gtk_progress_bar_update (GTK_PROGRESS_BAR (data), pvalue);        return TRUE;}/* Questa funzione segnala la riinizializzazione della    barra di avanzamento */void progress_r (void){      pstat = FALSE;  }void destroy (GtkWidget *widget, gpointer data){    gtk_main_quit ();}int main (int argc, char *argv[]){    GtkWidget *window;    GtkWidget *button;    GtkWidget *label;    GtkWidget *table;    GtkWidget *pbar;        gtk_init (&amp;argc, &amp;argv);        window = gtk_window_new (GTK_WINDOW_TOPLEVEL);        gtk_signal_connect (GTK_OBJECT (window), "delete_event",                        GTK_SIGNAL_FUNC (destroy), NULL);        gtk_container_border_width (GTK_CONTAINER (window), 10);        table = gtk_table_new(3,2,TRUE);    gtk_container_add (GTK_CONTAINER (window), table);        label = gtk_label_new ("Progress Bar Example");    gtk_table_attach_defaults(GTK_TABLE(table), label, 0,2,0,1);    gtk_widget_show(label);    /* Crea una nuova barra di avanzamento, impacchettala nella tabella       e mostrala */    pbar = gtk_progress_bar_new ();    gtk_table_attach_defaults(GTK_TABLE(table), pbar, 0,2,1,2);    gtk_widget_show (pbar);        /* Attiva un timeout che gestisca l'aggiornamento automatico della barra */    ptimer = gtk_timeout_add (100, progress, pbar);        /* Questo bottone segnala alla barra che deve essere resettata */    button = gtk_button_new_with_label ("Reset");    gtk_signal_connect (GTK_OBJECT (button), "clicked",                        GTK_SIGNAL_FUNC (progress_r), NULL);    gtk_table_attach_defaults(GTK_TABLE(table), button, 0,1,2,3);    gtk_widget_show(button);        button = gtk_button_new_with_label ("Cancel");    gtk_signal_connect (GTK_OBJECT (button), "clicked",                        GTK_SIGNAL_FUNC (destroy), NULL);        gtk_table_attach_defaults(GTK_TABLE(table), button, 1,2,2,3);    gtk_widget_show (button);        gtk_widget_show(table);    gtk_widget_show(window);        gtk_main ();        return 0;}</PRE></CODE></BLOCKQUOTE><P>In questo programmino ci sono quattro aree che riguardano il modo diuso generale delle Barre di Avanzamento; le vediamo ora nell'ordine.<P><BLOCKQUOTE><CODE><PRE>pbar = gtk_progress_bar_new ();</PRE></CODE></BLOCKQUOTE><P>Questo codice crea una nuova barra ciamata pbar.<P><BLOCKQUOTE><CODE><PRE>ptimer = gtk_timeout_add (100, progress, pbar);</PRE></CODE></BLOCKQUOTE><P>Questo codice usa dei timeout per abilitare degli intervalli di tempo uguali.Per usare le barre di avanzamento non &egrave; per&ograve; necessario servirsi di timeout.<P><BLOCKQUOTE><CODE><PRE>pvalue = GTK_PROGRESS_BAR (data)->percentage;</PRE></CODE></BLOCKQUOTE><P>Qui si assegna a pvalue il valore corrente della percentuale di avanzamento.<P><BLOCKQUOTE><CODE><PRE>gtk_progress_bar_update (GTK_PROGRESS_BAR (data), pvalue);</PRE></CODE></BLOCKQUOTE><P>Infine, questo codice aggiorna la barra di avanzamento con il valore di pvalue.<P>Questo &egrave; tutto quanto c'&egrave; da sapere sulle barre di avanzamento, divertitevi.<P><H2><A NAME="ss7.4">7.4 Dialoghi</A></H2><P><P>Il widget ``Dialogo'' &egrave; molto semplice: si tratta in realt&agrave; di una finestracon alcuni elementi pre-impacchettati. La struttura di un dialogo &egrave; laseguente:<P><BLOCKQUOTE><CODE><PRE>struct GtkDialog{      GtkWindow window;          GtkWidget *vbox;      GtkWidget *action_area;};</PRE></CODE></BLOCKQUOTE><P>Come potete vedere, crea semplicemente una finestra vi inserisce una vboxin cima, poi un separatore e infine una hbox come ``area di azione''.<P>Un Dialogo pu&ograve; essere utilizzato per messaggi per l'utente ealtri scopi simili. E' un widget molto essenziale, che ha una sola funzione,e precisamente:<P><BLOCKQUOTE><CODE><PRE>GtkWidget* gtk_dialog_new (void);</PRE></CODE></BLOCKQUOTE><P>Per cui, per creare una nuova finestra di dialogo, uate:<P><BLOCKQUOTE><CODE><PRE>GtkWidget *window;window = gtk_dialog_new ();</PRE></CODE></BLOCKQUOTE><P>Questa funzione crea una finestra di dialogo, dopodich&eacute; sta a voi utilizzarla. Potete mettere un bottone nella action_area facendoqualcosa del tipo:<P><BLOCKQUOTE><CODE><PRE>button = ...gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area), button,                    TRUE, TRUE, 0);gtk_widget_show (button);</PRE></CODE></BLOCKQUOTE><P>Potreste anche aggiungere, ad esempio, un'etichetta all'area della vbox,con qualcosa di questo genere:<P><BLOCKQUOTE><CODE><PRE>label = gtk_label_new ("Dialogs are groovy");gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), label, TRUE,                    TRUE, 0);gtk_widget_show (label);</PRE></CODE></BLOCKQUOTE><P>Per provare a usare una finestra di dialogo, potreste provare a metteredue bottoni nella action_area, per esempio un bottone ``Cancella'' ed unbottone ``OK'' e un'etichetta nella vbox che chieda qualcosa all'utente osegnali un errore. Poi potreste collegare un diverso segnale a ciascunbottone ed eseguire l'operazione che l'utente che viene scelta dall'utente.<P><H2><A NAME="ss7.5">7.5 Le Pixmap</A></H2><P><P>Le Pixmap sono strutture dati che contengono immagini. Queste immaginipossono poi essere utilizzate in varie occasioni, per esempio come icone sul desktop X-Window o come cusori. Una bitmap &egrave; una pixmap a duecolori.<P>Per usare una pixmap in GTK, dobbiamo in primo luogo creare una strutturaGdkPixmap utilizzando le routine disponibili nello strato GDK. Una Pixmappu&ograve; essere creata a partire da dati presenti in memoria o letti da un file.Vedremo ora una ad una le chiamate utilizzate per creare una pixmap.<P><BLOCKQUOTE><CODE><PRE>GdkPixmap *gdk_bitmap_create_from_data( GdkWindow *window,                                        gchar     *data,                                        gint      width,                                        gint      height );</PRE></CODE></BLOCKQUOTE><P>Si usa questa routine per creare una pixmap ad un solo piano (2 colori) dadati disponibili in memoria. Ogni bit nei dati indica lo stato acceso ospento di un pixel. L'altezza (height) e la larghezza (width) sono espressein pixel. GdkWindow &egrave; un puntatore alla finestra corrente, dal momento che

⌨️ 快捷键说明

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