Un nombre à calculer

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 464 fois - Téléchargée 30 fois

Contenu du snippet

Voici un petit programme très simple, mettant en oeuvre les principes de base de GTK+ (2.4 au moins).
Avec une fonction Callback associée au bouton de validation du calcul.
Attention, j'ai mis tous les widgets en variables globales, c'est plus simple
dans un premier temps pour les débutants...

(Bientôt, je mettrais aussi sur ce site une calculatrice complète et fonctionnelle
en GTK+ 2.4).
Bonne étude...

Source / Exemple :


#include <gtk/gtk.h>
#include <stdlib.h>
#include <string.h>

// ligne à utiliser pour la compilation sous Linux :
// gcc nombre_a_calc.c -o nombre_a_calc.exe `pkg-config --cflags --libs gtk+-2.0`

  GtkWidget *fenetre;
  GtkWidget *vbox;
  GtkWidget *lab_calcul_a_faire;
  GtkWidget *entry_resultat;
  GtkWidget *bout_valider;
  GtkWidget *lab_infos;

gint a, b, c;

void preparer_un_nouveau_calcul(void);
void verification(GtkWidget *widget, gpointer data);

int main(int argc, char **argv)
{
  gtk_init(&argc, &argv);

  fenetre = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_widget_set_size_request (fenetre, 300, 200);
  gtk_window_set_title (GTK_WINDOW (fenetre), "Trouver la valeur");
  g_signal_connect(G_OBJECT(fenetre),"destroy",G_CALLBACK(gtk_main_quit), NULL);

  vbox = gtk_vbox_new (TRUE, 10);
  gtk_container_add (GTK_CONTAINER (fenetre), vbox);
  gtk_container_set_border_width (GTK_CONTAINER (vbox), 20);

  lab_calcul_a_faire = gtk_label_new ( "un calcul" );
  gtk_box_pack_start (GTK_BOX (vbox), lab_calcul_a_faire, FALSE, FALSE, 0);
  preparer_un_nouveau_calcul();

  entry_resultat = gtk_entry_new ();
  gtk_box_pack_start (GTK_BOX (vbox), entry_resultat, FALSE, FALSE, 0);

  bout_valider = gtk_button_new_with_label("Valider votre réponse");
  gtk_box_pack_start (GTK_BOX (vbox), bout_valider, FALSE, FALSE, 0);
  g_signal_connect(G_OBJECT(bout_valider),"clicked",G_CALLBACK(verification), NULL);

  lab_infos = gtk_label_new("Tentez une réponse !");
  gtk_box_pack_start (GTK_BOX (vbox), lab_infos, FALSE, FALSE, 0);

  gtk_widget_show_all(fenetre);
  gtk_main();

  return EXIT_SUCCESS;
}

void preparer_un_nouveau_calcul(void)
{
  srand(time(NULL));
  a = rand() % 5;
  b = rand() % 5;
  c = a*b;

gtk_label_set_text(GTK_LABEL(lab_calcul_a_faire),
                   g_strdup_printf ("Calculez %d x %d =", a, b) );
}

void verification(GtkWidget *widget, gpointer data)
{
const gchar *result_recupere;
gint resultat;

result_recupere = gtk_entry_get_text(GTK_ENTRY(entry_resultat));

resultat=atoi(result_recupere);

if(resultat==c)
     {
     gtk_label_set_text(GTK_LABEL(lab_infos),"Bonne réponse ! Recommencez...");
     }
else {
     gtk_label_set_text(GTK_LABEL(lab_infos),"Mauvaise réponse ! Ré-essayez...");
     }

preparer_un_nouveau_calcul();

gtk_entry_set_text(GTK_ENTRY(entry_resultat),"");
}

Conclusion :


Voilà, en espérant que cela serve aux débutants...

Calogero GIGANTE

http://www.gigante.be/

A voir également

Ajouter un commentaire Commentaire
Messages postés
215
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
10 mars 2014

Ton code est assez simple en soit et peut permettre de voir un peu le fonctionnement de GTK,
C'est vrai mettre en global c'est pas terrible. Dans ce cas le programme n'est pas long donc ca va.
Jpeu pas tester le prog je n'ai plus GTK, je ne m'en sert plus. J'ai fait quelques programmes avec mais je préfère Qt.
Bon code lan meme et bon site internet ;) (http://www.langagec.be/)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.