Bonjour,

Je commence à utiliser la bibliothèque GTK+ depuis un moment. J'en viens donc à programmer une calculatrice basique, mais je rencontre un problème gérer les évènements des boutons :

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
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <gtk/gtk.h>
#include <math.h>
 
    GtkWidget* maFenetre = NULL;;
    GtkWidget* monBouton[16];
    GtkWidget* maTable = NULL;;
    GtkWidget* monTexte = NULL;;
 
void numero_un(GtkWidget* monBouton[0], gpointer data);
 
int main(int argc,char **argv) {
    int i = 0;
 
    gtk_init(&argc,&argv);
 
    maFenetre = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(maFenetre), "Calculatrice");
    gtk_window_set_default_size(GTK_WINDOW(maFenetre), 200, 200);
 
    // Création de la table
    maTable = gtk_table_new(5,4,TRUE);
    gtk_container_add(GTK_CONTAINER(maFenetre), GTK_WIDGET(maTable));
 
    // Creation du label
    monTexte = gtk_entry_new();
    gtk_entry_set_text(GTK_ENTRY(monTexte), "Composez le calcul");
 
    // Création des boutons :
    monBouton[0] = gtk_button_new_with_label("1");
    g_signal_connect(G_OBJECT(monBouton[0]), "clicked", G_CALLBACK(numero_un), NULL);
 
    monBouton[1] = gtk_button_new_with_label("2");
    monBouton[2] = gtk_button_new_with_label("3");
    monBouton[3] = gtk_button_new_with_label("+");
 
    monBouton[4] = gtk_button_new_with_label("4");
    monBouton[5] = gtk_button_new_with_label("5");
    monBouton[6] = gtk_button_new_with_label("6");
    monBouton[7] = gtk_button_new_with_label("-");
 
    monBouton[8] = gtk_button_new_with_label("7");
    monBouton[9] = gtk_button_new_with_label("8");
    monBouton[10] = gtk_button_new_with_label("9");
    monBouton[11] = gtk_button_new_with_label("/");
 
    monBouton[12] = gtk_button_new_with_label(".");
    monBouton[13] = gtk_button_new_with_label("0");
    monBouton[14] = gtk_button_new_with_label("=");
    monBouton[15] = gtk_button_new_with_label("*");
 
    for (i = 0 ; i < 16 ; i++)
    {
        gtk_widget_set_size_request (GTK_WIDGET(monBouton[i]), 40, 30);
    }
    // Insertion des boutons et du label :
    gtk_table_attach(GTK_TABLE(maTable), monTexte, 0, 4, 0, 1, GTK_EXPAND, GTK_EXPAND, 0,0);
 
    gtk_table_attach(GTK_TABLE(maTable), monBouton[0], 0, 1, 1, 2, GTK_EXPAND, GTK_EXPAND, 0,0);
    gtk_table_attach(GTK_TABLE(maTable), monBouton[1], 1, 2, 1, 2, GTK_EXPAND, GTK_EXPAND, 0,0);
    gtk_table_attach(GTK_TABLE(maTable), monBouton[2], 2, 3, 1, 2, GTK_EXPAND, GTK_EXPAND, 0,0);
    gtk_table_attach(GTK_TABLE(maTable), monBouton[3], 3, 4, 1, 2, GTK_EXPAND, GTK_EXPAND, 0,0);
 
    gtk_table_attach(GTK_TABLE(maTable), monBouton[4], 0, 1, 2, 3, GTK_EXPAND, GTK_EXPAND, 0,0);
    gtk_table_attach(GTK_TABLE(maTable), monBouton[5], 1, 2, 2, 3, GTK_EXPAND, GTK_EXPAND, 0,0);
    gtk_table_attach(GTK_TABLE(maTable), monBouton[6], 2, 3, 2, 3, GTK_EXPAND, GTK_EXPAND, 0,0);
    gtk_table_attach(GTK_TABLE(maTable), monBouton[7], 3, 4, 2, 3, GTK_EXPAND, GTK_EXPAND, 0,0);
 
    gtk_table_attach(GTK_TABLE(maTable), monBouton[8], 0, 1, 3, 4, GTK_EXPAND, GTK_EXPAND, 0,0);
    gtk_table_attach(GTK_TABLE(maTable), monBouton[9], 1, 2, 3, 4, GTK_EXPAND, GTK_EXPAND, 0,0);
    gtk_table_attach(GTK_TABLE(maTable), monBouton[10], 2, 3, 3, 4, GTK_EXPAND, GTK_EXPAND, 0,0);
    gtk_table_attach(GTK_TABLE(maTable), monBouton[11], 3, 4, 3, 4, GTK_EXPAND, GTK_EXPAND, 0,0);
 
    gtk_table_attach(GTK_TABLE(maTable), monBouton[12], 0, 1, 4, 5, GTK_EXPAND, GTK_EXPAND, 0,0);
    gtk_table_attach(GTK_TABLE(maTable), monBouton[13], 1, 2, 4, 5, GTK_EXPAND, GTK_EXPAND, 0,0);
    gtk_table_attach(GTK_TABLE(maTable), monBouton[14], 2, 3, 4, 5, GTK_EXPAND, GTK_EXPAND, 0,0);
    gtk_table_attach(GTK_TABLE(maTable), monBouton[15], 3, 4, 4, 5, GTK_EXPAND, GTK_EXPAND, 0,0);
 
    g_signal_connect(G_OBJECT(monBouton[0]), "clicked", G_CALLBACK(numero_un), NULL);
 
    // Affichage de la fenetre et de tout ce qu'elle contient
    gtk_widget_show_all(maFenetre);
    g_signal_connect(G_OBJECT(maFenetre), "destroy", G_CALLBACK(gtk_main_quit), NULL);
    gtk_main();
 
    return EXIT_SUCCESS;
}
 
void numero_un(GtkWidget* monBouton[0], gpointer data) {
 
    gchar stext[100];
    sprintf(stext, "%s", gtk_entry_get_text(GTK_ENTRY(monTexte)));
    strcat(stext, gtk_button_get_label(GTK_BUTTON(monBouton[0])));
    gtk_entry_set_text(GTK_ENTRY(monTexte), stext);
 
}
En effet, dès le moment où je clique sur le bouton 1, Windows m'indique que le programme a rencontré un problème et qu'il doit fermer. Mais, je ne trouve mon erreur, donc si vous avez une idée, n'hésitez pas !

Cordialement,

Edit :Le problème est resolu, merci quand même