Voici mon petit programme que je développe pour apprendre le c et GTK
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
# include <stdlib.h>
# include <gtk/gtk.h>
/* variale pour les widgets GTK */
   GtkWidget *fenprin;
   gchar *texte_mois;
   int icone, i;
   float montant, interet;
   const char *fin;
   const char *zone_text_montant;
   const char *zone_text_interet;
   GtkWidget *vconteneur;
   GtkWidget *hconteneur_1;
   GtkWidget *hconteneur_2;
   GtkWidget *separation;
   GtkWidget *labelzonemontant;
   GtkWidget *zonemontant;
   GtkWidget *labelzoneinteret;
   GtkWidget *zoneinteret;
   GtkWidget *calculbtn;
   GtkWidget *label_mois;
   GtkWidget *label_ancienne_solde;
 
/* fonction de calcul */
void calcul(GtkWidget *widget, gpointer data)
{
   // récupére l'information de la zone de saisie zone montant 
   // et zone interet
   zone_text_montant = gtk_entry_get_text(GTK_ENTRY(zonemontant));
   zone_text_interet = gtk_entry_get_text(GTK_ENTRY(zoneinteret));
   // transformation chaine de caractère en chaine numérique
   // fonction atoi => ascii to int 
   montant = atof(zone_text_montant);
   // transformation chaine de caractère en chaine numérique 
   // fonction atof => ascii to float 
   interet = atof(zone_text_interet);
   for (i = 0;i < 12; i++)
   {
      /* transformation chaine numérique en chaine de caractère */
      //sprintf(resultat,"%.2f",montant*(interet/12));
   }
   g_sprintf(fin,"%.2f",interet);
   gtk_label_set_label(GTK_LABEL(label_ancienne_solde), fin);
}
 
int main (int argc,char **argv )
{
   /* initialisation de GTK */
   gtk_init(&argc, &argv);
 
   /* création de la fenêtre */
   fenprin = gtk_window_new(GTK_WINDOW_TOPLEVEL);
   icone = gtk_window_set_icon_from_file(GTK_WINDOW(fenprin),"placement.ico",NULL);
   gtk_window_set_title(GTK_WINDOW(fenprin),"- Calcul de votre placement -");
   gtk_window_set_default_size(GTK_WINDOW(fenprin),500,400);
 
   /* conteneur vertical */
   vconteneur = gtk_vbox_new(FALSE, 0 );
   gtk_container_add(GTK_CONTAINER(fenprin), vconteneur);
 
   /* 1er conteneur horizontal pour les boutons*/
   hconteneur_1 = gtk_hbox_new(FALSE, 0 );
   gtk_box_pack_start ( GTK_BOX(vconteneur),hconteneur_1, FALSE,FALSE,0);   
 
   /* Bar horizontale de séparation */
   separation = gtk_hseparator_new();
   gtk_box_pack_start ( GTK_BOX(vconteneur),separation, FALSE,FALSE,0);   
 
   /* création du label de la première zone de saisie */
   labelzonemontant = gtk_label_new("Montant :");
   gtk_box_pack_start ( GTK_BOX(hconteneur_1),labelzonemontant,FALSE,FALSE,0); 
 
   /* création de la première zone de saisie */
   zonemontant = gtk_entry_new();
   gtk_entry_set_max_length(GTK_ENTRY(zonemontant),9);
   gtk_widget_set_size_request(zonemontant,85,25);
   gtk_box_pack_start ( GTK_BOX(hconteneur_1),zonemontant,FALSE,FALSE,0); 
 
   /* création du label de la seconde zone de saisie */
   labelzoneinteret = gtk_label_new(" (euros)  -  Intéret :");
   gtk_box_pack_start ( GTK_BOX(hconteneur_1),labelzoneinteret,FALSE,FALSE,0); 
 
   /* création de la seconde zone de saisie */
   zoneinteret = gtk_entry_new();
   gtk_entry_set_max_length(GTK_ENTRY(zoneinteret),3);
   gtk_widget_set_size_request(zoneinteret,85,25);
   gtk_box_pack_start ( GTK_BOX(hconteneur_1),zoneinteret,FALSE,FALSE,0); 
 
   /* création du bouton */
   calculbtn = gtk_button_new_with_label("Valider");
   gtk_widget_set_size_request(calculbtn,85,25);
   gtk_box_pack_end ( GTK_BOX(hconteneur_1),calculbtn,FALSE,FALSE,0); 
   g_signal_connect(G_OBJECT(calculbtn), "clicked", G_CALLBACK(calcul), NULL);
 
   /* signal d'arrêt du programme */
   g_signal_connect(G_OBJECT(fenprin), "delete-event",G_CALLBACK(gtk_main_quit), NULL);
 
   /* 2ème conteneur horizontal pour les labels*/
   hconteneur_2 = gtk_hbox_new(FALSE, 0 );
   gtk_box_pack_start ( GTK_BOX(vconteneur),hconteneur_2, FALSE,FALSE,0);   
 
   /* création du label qui affiche les mois */
   texte_mois = "- Mois/Année -\n\n Janvier\n Février\n Mars\n "
                "Avril\n Mai\n Juin\n Juillet\n Août\n Septembre\n"
                "Octobre\n Novembre\n Décembre";
   label_mois = gtk_label_new(texte_mois);
   gtk_label_set_justify(GTK_LABEL(label_mois),GTK_JUSTIFY_CENTER);
   gtk_box_pack_start ( GTK_BOX(hconteneur_2),label_mois,FALSE,FALSE,0); 
 
   /* création du label qui affiche les anciennes soldes */
   label_ancienne_solde = gtk_label_new("- Ancienne solde -\n\n 1111 ");
   gtk_label_set_justify(GTK_LABEL(label_ancienne_solde),GTK_JUSTIFY_CENTER);
   gtk_box_pack_start ( GTK_BOX(hconteneur_2),label_ancienne_solde,FALSE,FALSE,0); 
 
   /* boucle évènementielle */
   gtk_widget_show_all(fenprin);
   gtk_main();
 
   return EXIT_SUCCESS;
}
j'ai cette erreur :
GLib-CRITICAL **: g_vsprintf: assertion `string != NULL' failed
si quelqu'un peut m'expliquer le problème ?
c'est assez difficile de travailler avec les GTK_entry, quand on manipule des chiffres..