Bonsoir à tous,

Je me suis interessé récemment à l'interface graphique GTK+ pour un projet de langage C que j'ai à faire (merci les études).
Mon projet est de réaliser une calculatrice "graphique", je ne rentrerais pas plus dans les détails sauf si cela intéresse quelqu'un.


J'ai suivi des tutos à droite et à gauche pour commencer l'ascension de ce géant.
Malheureusement, dès le départ je bloque et c'est devenu décourageant.
C'est pourquoi je viens solliciter un peu votre gentillesse (et vos connaissances) pour me sortir de là.

Donc voici mon code :
*Ma fonction executrice
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
121
122
123
124
125
126
127
128
129
 
#include <stdlib.h>
#include <gtk/gtk.h>
#include "affiche.h"
 
#define TAILLE 16
 
int main(int argc, char **argv)
{
 
/*widget principal*/
GtkWidget *Ma_Fenetre = NULL;
/*widget important (conteneur)*/
GtkWidget *Mon_Tableau = NULL;
/*widgets actions (boutons ou zone de textes ...)*/
GtkWidget *Mon_Bouton_Quitter = NULL;
GtkWidget *Ma_Zone_Texte = NULL;
GtkWidget *Mon_Bouton[TAILLE] = {NULL};
 
 
  /* Initialisation de GTK+ */
  gtk_init (&argc, &argv);
 
/* Creation de la fenetre principale de notre application */
Ma_Fenetre = gtk_window_new (GTK_WINDOW_TOPLEVEL);/*Création officielle de la fenetre xd*/
 
gtk_window_set_default_size(GTK_WINDOW (Ma_Fenetre), 420, 380);
 
gtk_window_set_title (GTK_WINDOW (Ma_Fenetre), "Calculatrice");
gtk_window_set_position(GTK_WINDOW (Ma_Fenetre), GTK_WIN_POS_CENTER);
 
g_signal_connect (G_OBJECT (Ma_Fenetre), "destroy", G_CALLBACK (gtk_main_quit), NULL); /*Lorsque l'utilisateur appuie sur la croix le programme est stoppé (il ne tourne plus)*/
 
 
/* Creation du tableau et placement*/
Mon_Tableau = gtk_table_new(7,4,TRUE);
gtk_container_add(GTK_CONTAINER(Ma_Fenetre),GTK_WIDGET(Mon_Tableau));
 
 
	/* Creation de la zone de texte */
 
	Ma_Zone_Texte = gtk_text_view_new ();
 
	gtk_table_attach_defaults (GTK_TABLE (Mon_Tableau), Ma_Zone_Texte, 0, 4, 0, 1);/*Gauche, Droite toujours + grand que gauche, Haut, Bas toujours + grand que haut*/
 
 
	/*Creation du bouton Quitter*/
	Mon_Bouton_Quitter = gtk_button_new_from_stock (GTK_STOCK_QUIT);
	gtk_table_attach_defaults(GTK_TABLE(Mon_Tableau),Mon_Bouton_Quitter,2,3,6,7);
	g_signal_connect (G_OBJECT (Mon_Bouton_Quitter), "clicked", G_CALLBACK (gtk_main_quit), NULL);/*Lorsque l'utilisateur appuie sur le bouton quitter le programme est stoppé (il ne tourne plus)*/
 
 
		/* Creation des boutons standars de la calculatrice et placement*/
 
/* C'est cette partie qui me pose probleme*/
 
		Mon_Bouton[0] = gtk_button_new_with_label("0");
		gtk_table_attach_defaults(GTK_TABLE(Mon_Tableau),Mon_Bouton[0],0,1,6,7);
		/*g_signal_connect (G_OBJECT (Mon_Bouton[0]), "clicked", G_CALLBACK (cb_affiche(Mon_Bouton[], Mon_Bouton[0])), Ma_Zone_Texte);*/
 
		Mon_Bouton[1] = gtk_button_new_with_label("1");
		gtk_table_attach_defaults(GTK_TABLE(Mon_Tableau),Mon_Bouton[1],0,1,5,6);/*
		g_signal_connect (G_OBJECT (Mon_Bouton[1]), "clicked", G_CALLBACK (cb_affiche(Mon_Bouton[], Mon_Bouton[1])), Ma_Zone_Texte);
		*/
		Mon_Bouton[2] = gtk_button_new_with_label("2");
		gtk_table_attach_defaults(GTK_TABLE(Mon_Tableau),Mon_Bouton[2],1,2,5,6);/*
		g_signal_connect (G_OBJECT (Mon_Bouton[2]), "clicked", G_CALLBACK (cb_affiche(Mon_Bouton[], Mon_Bouton[2])), Ma_Zone_Texte);
		*/
		Mon_Bouton[3] = gtk_button_new_with_label("3");
		gtk_table_attach_defaults(GTK_TABLE(Mon_Tableau),Mon_Bouton[3],2,3,5,6);/*
		g_signal_connect (G_OBJECT (Mon_Bouton[3]), "clicked", G_CALLBACK (Affiche), Ma_Zone_Texte);
		*/
		Mon_Bouton[4] = gtk_button_new_with_label("4");
		gtk_table_attach_defaults(GTK_TABLE(Mon_Tableau),Mon_Bouton[4],0,1,4,5);/*
		g_signal_connect (G_OBJECT (Mon_Bouton[4]), "clicked", G_CALLBACK (Affiche), Ma_Zone_Texte);
		*/
		Mon_Bouton[5] = gtk_button_new_with_label("5");
		gtk_table_attach_defaults(GTK_TABLE(Mon_Tableau),Mon_Bouton[5],1,2,4,5);/*
		g_signal_connect (G_OBJECT (Mon_Bouton[5]), "clicked", G_CALLBACK (Affiche), Ma_Zone_Texte);
		*/
		Mon_Bouton[6] = gtk_button_new_with_label("6");
		gtk_table_attach_defaults(GTK_TABLE(Mon_Tableau),Mon_Bouton[6],2,3,4,5);/*
		g_signal_connect (G_OBJECT (Mon_Bouton[6]), "clicked", G_CALLBACK (Affiche), Ma_Zone_Texte);
		*/
		Mon_Bouton[7] = gtk_button_new_with_label("7");
		gtk_table_attach_defaults(GTK_TABLE(Mon_Tableau),Mon_Bouton[7],0,1,3,4);/*
		g_signal_connect (G_OBJECT (Mon_Bouton[7]), "clicked", G_CALLBACK (Affiche), Ma_Zone_Texte);
		*/
		Mon_Bouton[8] = gtk_button_new_with_label("8");
		gtk_table_attach_defaults(GTK_TABLE(Mon_Tableau),Mon_Bouton[8],1,2,3,4);/*
		g_signal_connect (G_OBJECT (Mon_Bouton[8]), "clicked", G_CALLBACK (Affiche), Ma_Zone_Texte);
		*/
		Mon_Bouton[9] = gtk_button_new_with_label("9");
		gtk_table_attach_defaults(GTK_TABLE(Mon_Tableau),Mon_Bouton[9],2,3,3,4);/*
		g_signal_connect (G_OBJECT (Mon_Bouton[9]), "clicked", G_CALLBACK (Affiche), Ma_Zone_Texte);
		*/
		Mon_Bouton[10] = gtk_button_new_with_label("=");
		gtk_table_attach_defaults(GTK_TABLE(Mon_Tableau),Mon_Bouton[10],3,4,5,7);/*
		g_signal_connect (G_OBJECT (Mon_Bouton[10]), "clicked", G_CALLBACK (Affiche), Ma_Zone_Texte);
		*/
		Mon_Bouton[11] = gtk_button_new_with_label("+");
		gtk_table_attach_defaults(GTK_TABLE(Mon_Tableau),Mon_Bouton[11],3,4,3,5);/*
		g_signal_connect (G_OBJECT (Mon_Bouton[11]), "clicked", G_CALLBACK (Affiche), Ma_Zone_Texte);
		*/
		Mon_Bouton[12] = gtk_button_new_with_label("-");
		gtk_table_attach_defaults(GTK_TABLE(Mon_Tableau),Mon_Bouton[12],3,4,1,3);/*
		g_signal_connect (G_OBJECT (Mon_Bouton[12]), "clicked", G_CALLBACK (Affiche), Ma_Zone_Texte);
		*/
		Mon_Bouton[13] = gtk_button_new_with_label("*");
		gtk_table_attach_defaults(GTK_TABLE(Mon_Tableau),Mon_Bouton[13],2,3,1,3);/*
		g_signal_connect (G_OBJECT (Mon_Bouton[13]), "clicked", G_CALLBACK (Affiche), Ma_Zone_Texte);
		*/
		Mon_Bouton[14] = gtk_button_new_with_label("/");
		gtk_table_attach_defaults(GTK_TABLE(Mon_Tableau),Mon_Bouton[14],1,2,1,3);/*
		g_signal_connect (G_OBJECT (Mon_Bouton[14]), "clicked", G_CALLBACK (Affiche), Ma_Zone_Texte);
		*/
		Mon_Bouton[15] = gtk_button_new_with_label(",");
		gtk_table_attach_defaults(GTK_TABLE(Mon_Tableau),Mon_Bouton[15],1,2,6,7);/*
		g_signal_connect (G_OBJECT (Mon_Bouton[15]), "clicked", G_CALLBACK (Affiche), Ma_Zone_Texte);
 
		*/
  /* Affichage de la fenetre principale et de toutes ses applications */
	gtk_widget_show_all (Ma_Fenetre);
 
  /* Lancement de la boucle principale */
	gtk_main ();
 
return EXIT_SUCCESS;
}
*Ma fonction affiche (.c et .h):
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
 
#include "affiche.h"
#include <stdio.h>
 
void cb_affiche(GtkWidget *pBouton, gpointer user_data)
{
/*Je n'ai pas compris comment passer les paramètres sans les perdres et je ne saurais etre sur de selectionner le bon parametre lors du g_signal_connect*/
}
 
 
#ifndef AFFICHE_H
#define AFFICHE_H
 
#include <stdio.h>
#include <stdlib.h>
#include <gtk/gtk.h>
 
void cb_affiche(GtkWidget *pBouton, gpointer user_data);
 
#endif
Ce que j'essaye de faire concretement :
Lorsque j'appuie sur le bouton "0" par exemple je voudrais qu'il s'affiche dans ma zone de texte (je rapelle que c'est une text_view, peut etre à tort mais bon...).

Deja si j'arrivais a faire ça se serait super bien et pour la suite il faudra bien que je me débrouille un peu tout seul non mais ! ^^.
Je remercie d'avance ceux qui vont jeter un oeil sur mon code.