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

Guida Gtk+ a puntate ( XIV parte )

Come promesso, dopo la fine degli esami, una nuova guida alle Gtk+. In questa puntata affronteremo due argomenti differenti il primo riguardante la visualizzazione di un’immagine all’interno di un’applicazione in gtk+, il secondo come creare una barra di stato ( quella barra piccola che si vede nella maggior parte delle applicazioni, con a sinistra un messaggio e a destra il triangolino per ridimensionare la finestra.

GtkImage – Immagini in Gtk+

Le funzioni per il caricamento di un’immagine in un programma con le gtk+, uniscono ( o richiedono ) operazioni con la libreria Gdk e GdkPixbuf.

Come per tutte le altre cose, io mi concentro unicamente sulle funzioni principali, tralasciando quelle specifiche per casi particolari, quindi iniziamo a vedere come caricare un’immagine da file e da stock. Per il primo c’è una funzione che fa tutto: gtk_image_new_from_file () che riceve come argomento il nome del file\immagine e ritorna, in tipo GtkWidget *, la nostra immagine se il caricamento è avvenuto con successo, altrimenti questa stock. Proprio per il fatto che questa funzione non ritorni mai NULL e non dia informazioni sul tipo di errore quando non è possibile caricare il file\immagine specificato si può ricorrere ad un altra funzione che esegue esattamente la stessa cosa ma che allunga, anche se di poco, il giro da fare per visualizzare l’immagine finale.

La funzione è gdk_pixbuf_new_from_file () che riceve come primo argomento sempre il nome del file\immagine da caricare, e come secondo  argomento l’indirizzo di una variabile GError *, che verrà impostata nel caso la funzione ritorni NULL ( ovvero nel caso sia occorso un qualche tipo di errore ). Questa funzione però ritorna un GdkPixbuf * che noi possiamo tranquillamente convertire nel nostro GtkWidget * da visualizzare tramite la funzione gtk_image_new_from_pixbuf (). Se non vi è chiaro ancora questo metodo un pochino più articolato faccio un codice di esempio:

1
2
3
4
5
6
7
8
GtkWidget *image;
GdkPixbuf *pixbuf;
GError *error = NULL;
 
pixbuf = gdk_pixbuf_new_from_file ("miofile.jpeg", &error);
if ( !pixbuf )
     g_critical ("(%d) %s\n", error->code, error->message);
image = gtk_image_new_from_pixbuf (pixbuf);

Per quanto riguarda il caricamento di un’immagine da stock il procedimento è semplicissimo, basta passare il nome della stock a gtk_image_new_from_stock ()  e poi specificare la grandezza della stock dipendentemente dal contesto in cui la si vuole utilizzare. Ritorna il GtkWidget * con l’immagine STOCK pronta ad essere visualizzata.

GtkStatusbar – Barra di stato

Per chi non avesse ancora capito quale è in un applicazione gtk+ la barra di stato posto un immagine molto autoesplicativa:

statusbar-jeex.png

 La creazione è molto semplice, il widget è ottenibile richiamando unicamente la funzione gtk_statusbar_new ()  che non riceve argomenti. Di questo tipo però ci sarebbe da parlare più teoricamente che praticamente. Il suo funzionamento nella visualizzazione dei messaggi avviene tramite stack LIFO su canali sperati. Ovvero per i messaggi son presenti azioni di push e pop, e possono essere inviati su “context id” ( canali ) differenti. Se si vuole utilizzare in modo semplicissimo questa barra di stato è bene utilizzare il canale 0 ed eseguire ( dopo il primo push ) sempre un pop prima di nuovo push così da non lasciare in memoria vecchi messaggi che non servono più.

Codice di esempio:

1
2
3
4
5
6
7
8
GtkWidget *statusbar;
 
statusbar = gtk_statusbar_new ();
gtk_statusbar_push (GTK_STATUSBAR (statusbar), 0, "Starting GtkStatusbar :)");
 
/* successivamente per non lasciare in buffer nulla */
gtk_statusbar_pop (GTK_STATUSBAR (statusbar), 0);
gtk_statusbar_push (GTK_STATUSBAR (statusbar), 0, "Pop & Push!");

Per finire con la status bar, il triangolino per ridimensionare si può “eliminare” tramite la funzione gtk_statusbar_set_has_resize_grip () che riceve come primo argomento la statusbar e come secondo un valore booleano impostato a TRUE se si vuole mantenere il triangolino per il ridimensionamento altrimenti FALSE.

Fine Quattordicesima Puntata
Ok, abbiamo parlato un po’ e ci voleva dopo tanti giorni di silenzio. Spero che sia tutto chiaro, sono stato molto di più sulla teoria questa volta, alla fin fine star lì a descrivere ogni singola funzione non ha molto senso se non si conosce prima su cosa si sta operando.

Ciauz ;)

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

    nooooooo ora che si stava facendo interessante….ma non c’è nient’altro? comunque è un’ottima guida complimenti

  2. luky
    1 giugno 2009 a 23:27 | #2

    p.s. non’è che potresti mettere come si crea un textarea e qual’è la funzione che viene chiamata quando cambia il testo per metterlo in una variabile??? tipo password…..scusa l’insistenza

  3. 1 giugno 2009 a 23:47 | #3

    Cosa “noooo”? XD

    Grazie per il complimento

  4. 1 giugno 2009 a 23:48 | #4
  5. luky
    2 giugno 2009 a 0:03 | #5

    si gtkentry sotto ho notato che ci sono pure le Properties comunque grazie ancora e buonanotte

  6. 2 giugno 2009 a 0:06 | #6

    Nella prossima puntata potrei parlarne, avevo già intenzione di andare su quell’argomento lì ;)

  7. luky
    2 giugno 2009 a 0:11 | #7

    prima di andare a dormire c’è un’altro problema :) spero l’ultimo: faccio la funzione gtk_image_new_from_file(“ciao.jpg”); ma non mi carica il file ed esce l’immagine con la x……..come si fa a mettere il percorso intero non l’ho mai capito eppure mi è capitato molte volte e ho lasciato stare

  8. 2 giugno 2009 a 0:13 | #8

    il file ciao.jpg sta nella cartella da cui lanci il programma?

  9. luky
    2 giugno 2009 a 0:18 | #9

    sisi non è che forse è perchè programmo su windows?

  10. luky
    2 giugno 2009 a 0:19 | #10

    o forse è troppo grande l’img

  11. 2 giugno 2009 a 0:21 | #11

    Forse si, perché in effetti dipende da che “percorso del programma” dà il sistema quando lancia l’eseguibile.. se ti va col percorso assoluto allora dipende sicuramente da quello.

  12. luky
    2 giugno 2009 a 0:22 | #12
  13. luky
    2 giugno 2009 a 0:26 | #13

    non sò come metterlo non credo che devo solo mettere: c:\ciao\1.png……..perchè in questo caso non funziona

  14. 2 giugno 2009 a 0:36 | #14

    Tranne il fatto che passi un GTK_BOX alla funzione gtk_container_add () che vuole un GTK_CONTAINER, e mi chiedo anche perchè dichiari la finestra come POPUP.. solitamente si dichiara sempre TOPLEVEL.

    A me comunque funziona: http://www.hds619.net/Himages/Schermata.6OafF.png

    P.s.: Non so se l’hai fatto per motivi che io ignoro, comunque un elemento in una tabella può occupare più celle sia in altezza che in larghezza e non per forza un solo riquadro.

  15. luky
    2 giugno 2009 a 10:38 | #15

    sisi lo sapevo che può occupare più celle…….comunque mo cambio hd e metto ubuntu così provo li…..ti faccio sapere se funziona

  16. luky
    2 giugno 2009 a 10:51 | #16

    bho sarà windows che fa schifo comunque su ubuntu funziona alla perfezione…….in attesa di nuove guide

  17. luky
    2 giugno 2009 a 12:54 | #17

    ho un grosso problema è da stamattina che ci provo e riprovo spero mi sai dare una mano: cerco di aprire un file ma non me lo fa aprire che sbaglio???
    http://www.hds619.net/lys_show.php?c=%27fread2w340.c%27

  18. 2 giugno 2009 a 13:05 | #18

    la fread la puoi utilizzare solo se apri il file in rb

  19. mamo139
    14 luglio 2009 a 20:08 | #19

    ciao style!! come va??
    complimenti per la guida!! era da tempo che volevo imparare a fare qualche programmino con finestre, ma non avevo mai avuto voglia di imparare e la tua guida è arrivata con tempismo perfetto :D

    fino ad ora tutto chiarissimo, in questa lezione ho un problemino, non so come visualizzare la statusbar… che funzione devo usare??
    grazie, a presto ;)

  20. 16 luglio 2009 a 10:45 | #20

    Ciao :)

    Scusa se non ho guardato in questi ultimi giorni il blog ma ci son stati altri impegni, per quanto riguarda la visualizzazione di una statusbar, ma più generalmente la visualizzazione di un qualsiasi widget, una volta inserita in un widget che a sua volta sia collegato direttamente o indirettamente alla “window” si possono usare due metodi:

    gtk_widget_show () per ogni singolo widget creato.
    gtk_widget_show_all () sulla “window”, o sul contenitore, che automaticamente visualizza tutti i widget “figli” inseriti.

  1. Nessun trackback ancora...
Custom Avatars For Comments