[GTK]Comment récupérer les valeurs de plusieurs champs dans un questionnaire

electron159 Messages postés 10 Date d'inscription mercredi 21 février 2007 Statut Membre Dernière intervention 27 mai 2007 - 26 mai 2007 à 19:42
electron159 Messages postés 10 Date d'inscription mercredi 21 février 2007 Statut Membre Dernière intervention 27 mai 2007 - 26 mai 2007 à 21:38
Bonjour à tous

Je programme actuellement une petite application en GTK.
En résumé: On rempli un petit questionnaire et on appuie sur le bouton valider.
Sauf que je n'arrive a faire passer qu'un seul textbox GTK par ma fonction de callback (associée au bouton) alors que dans un questionnaire, il y-en a plusieurs... J'ai essayé de faire passer plusieurs fonctions ou un tableau, mais ça ne marche pas
Une idée?

5 réponses

katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 3
26 mai 2007 à 21:22
Salut,
La solution la plus rationnelle consiste à créer un tableau de widgets indexés, puis de passer un pointeur du tableau au callback.
Un peu de code vaut mille mots:

#include <gtk/gtk.h>

static void Bouton_Click (GtkWidget *widget, GtkEntry **entry)
{
  int n;
  for(n=0; n<4; n++) 
    g_print ("%d [%s]\n", n, gtk_entry_get_text(entry[n]));
}

int main( int argc, char *argv[] )
{
  GtkWidget *fen, *vbox, *entry[4], *bouton;
  int n;
 
  /* Crée la fenêtre */
  gtk_init (&argc, &argv);
  fen = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    g_signal_connect(G_OBJECT(fen),"destroy",G_CALLBACK(gtk_main_quit),NULL);
    gtk_window_set_position (GTK_WINDOW (fen), GTK_WIN_POS_CENTER);

  vbox = gtk_vbox_new (FALSE, 0);
    gtk_container_add (GTK_CONTAINER (fen), vbox);

  /* Crée les widgets Entry indexés */
  for (n=0; n<4; n++)
  {
    entry[n] = gtk_entry_new ();
    gtk_entry_set_max_length (GTK_ENTRY (entry[n]), 50);
    gtk_entry_set_text (GTK_ENTRY (entry[n]), g_strdup_printf("hello %d", n));
    gtk_container_add (GTK_CONTAINER (vbox), entry[n]);
  }

  /* Crée le bouton */
  bouton = gtk_button_new_with_label ("Button");
  gtk_container_add (GTK_CONTAINER (vbox), bouton);
  g_signal_connect (G_OBJECT (bouton), "clicked",
              G_CALLBACK (Bouton_Click), (GtkEntry*) entry);

  gtk_widget_show_all (fen);
  gtk_main();
  return 0;
}

I can break the rules too, goodbye.
0
katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 3
26 mai 2007 à 21:27
L'autre solution un peu merdique consiste à conserver en variable globale un pointeur vers chaque Entry, puis d'y accéder dans le callback sans lui passer aucun paramètre.

I can break the rules too, goodbye.
0
electron159 Messages postés 10 Date d'inscription mercredi 21 février 2007 Statut Membre Dernière intervention 27 mai 2007
26 mai 2007 à 21:30
Merci bien Katsankat.
Pour la première solution, j'ai pas trop envie d recréer tous mes widgets; por la seconde, j'aime pas trop non plus ( trop peur de me faire taper dessus par mes profs lol). Je crois que je vais essayer par une structure.

Cordialement,

Alex
0
katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 3
26 mai 2007 à 21:37
Ah tu avais déjà la réponse alors...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
electron159 Messages postés 10 Date d'inscription mercredi 21 février 2007 Statut Membre Dernière intervention 27 mai 2007
26 mai 2007 à 21:38
En fait j'espérais qu'il y-avait plus simple. Par ce que là je vais me taper une structure géante. Y-a beaucoup beaucoup de champs dans mon formulaire :(
0