Ebbene si, proprio quando tutta l’ analisi matematica del mondo ti sta addosso e dovunque ti giri vedi solo numeri complessi, integrali, limiti, funzioni…decidi che è arrivato il momento di staccare un attimo e sei convinto che è arrivata l’ ora di imparare ad usare le librerie GTK+ con il C!!

Ergo ho gettato tutti i libri per terra e mi sono messo a leggere questa stupenda guida che tra l’ altro consiglio a tutti: http://www.gadaleta.org/listing/Corso%20di%20gtk/
Il risultato??..già dopo aver letto i primi paragrafi ho buttato già un pò di codice. Certo, è un programmino semplicissimo atto ad illustrare alcune delle potenzilità di GTK+.
In pratica cliccando su uno dei nove bottoni creati grazie al widget “table”, e grazie alla funzione G_CALLBACK(che richiama “al click” di un bottone un’ altra funzione), il terminale stamperà la posizione del bottone nella “matricetta” 3×3!
Eccolo qui(davvero molto semplice
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | /* Copyright 2010 Antonio Murdaca <tonicooperi13@tonicooperi.eu> This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ /* Semplicissimo programma che fa uso della programmazione in C con le GTK+. Stampa sul terminale la posizione del bottone premuto. */ #include <gtk/gtk.h> #include <stdio.h> #include <stdlib.h> void chiudi(GtkWidget *widget,gpointer data) { gtk_main_quit(); } //funzioni per determinare la posizione dei bottoni della prima riga void button_11(GtkWidget *widget){ g_print("bottone nella prima riga e nella prima colonna!\n"); } void button_12(GtkWidget *widget){ g_print("bottone nella prima riga e nella seconda colonna!\n"); } void button_13(GtkWidget *widget){ g_print("bottone nella prima riga e nella terza colonna!\n"); } //funzioni per determinare la posizione dei bottoni della seconda riga void button_21(GtkWidget *widget){ g_print("bottone nella seconda riga e nella prima colonna!\n"); } void button_22(GtkWidget *widget){ g_print("bottone nella seconda riga e nella seconda colonna!\n"); } void button_23(GtkWidget *widget){ g_print("bottone nella seconda riga e nella terza colonna!\n"); } //funzioni per determinare la posizione dei bottoni della terza riga void button_31(GtkWidget *widget){ g_print("bottone nella terza riga e nella prima colonna!\n"); } void button_32(GtkWidget *widget){ g_print("bottone nella terza riga e nella seconda colonna!\n"); } void button_33(GtkWidget *widget){ g_print("bottone nella terza riga e nella terza colonna!\n"); } int main (int argc, char *argv[]){ GtkWidget *window; GtkWidget *table; GtkWidget *button; char lbl[20]; int i, j; gtk_init(&argc,&argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); table = gtk_table_new(3,3,TRUE); for(i=0;i<3;i++){ for(j=0;j<3;j++){ sprintf(lbl,"Bottone %d,%d",i,j); button = gtk_button_new_with_label(lbl); g_signal_connect (G_OBJECT (window), "delete_event", G_CALLBACK (chiudi), NULL); //si poteva usare direttamente "gtk_main_quit" invece di "chiudi" switch (j){ case 0: if(i==0) g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (button_11), NULL); if(i==1) g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (button_12), NULL); if(i==2) g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (button_13), NULL); break; case 1: if(i==0) g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (button_21), NULL); if(i==1) g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (button_22), NULL); if(i==2) g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (button_23), NULL); break; case 2: if(i==0) g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (button_31), NULL); if(i==1) g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (button_32), NULL); if(i==2) g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (button_33), NULL); break; } gtk_table_attach_defaults(GTK_TABLE(table), button, i, i+1, j, j+1); gtk_widget_show(button); } } gtk_container_add(GTK_CONTAINER(window),table); gtk_widget_show(table); gtk_widget_show(window); gtk_main(); return(0); } |
Ovviamente presumo che questo semplice programmino possa essere ottimizzato e magari non necessita di tutte quelle funzioni. Ma purtroppo adesso sto iniziando a programmare sul serio e quindi qualche spreco ci sarà sempre. ![]()
Per compilarlo basta avere installato le librerie GTK+ sul proprio pc e dare il seguente comando da terminale:
gcc -Wall -g codice.c -o eseguibile `pkg-config –cflags –libs gtk+-2.0`
Bene, dopo questa breve pausa direi che è di nuovo ora di cimentarsi nell’ analisi matematica! ![]()
A presto!















