Se connecter / S'enregistrer
Votre question

probleme C -> GTK -> glade: Valeurs éronnées

Tags :
  • Programmation
Dernière réponse : dans Programmation
11 Février 2008 19:48:49

Bonjour, j'ai découvert Glade il y a peu de temps et je l'ai trouvé génial.
Mais j'ai un très gros probleme:
Quand je récupere une valeur entrée par l'utilisateur (avec un spin button) en la fprintfant la valeur est totalement differente et, elle ne change pas quand change la valeur ( je suis sous XP ou Vista)
ex:
j'execute mon programme, je met la valeur du spinbutton à 8, je vais chercher le fichier ou je l'ai fprintfé et je trouve une valeur.

je recommence (j'ai supprimé le fichier ou j'avais fprintfé la 1ere valeur), je met la valeur à 99 et la valeur fprintfé est la même que la premiere.

Si cela n'est pas tres claire, je met le "interface.c":
  1. /*
  2. * DO NOT EDIT THIS FILE - it is generated by Glade.
  3. */
  4.  
  5. #ifdef HAVE_CONFIG_H
  6. # include <config.h>
  7. #endif
  8.  
  9. #include <sys/types.h>
  10. #include <sys/stat.h>
  11. #ifdef HAVE_UNISTD_H
  12. #include <unistd.h>
  13. #endif
  14. #include <string.h>
  15. #include <stdio.h>
  16.  
  17. #include <gdk/gdkkeysyms.h>
  18. #include <gtk/gtk.h>
  19.  
  20. #include "callbacks.h"
  21. #include "interface.h"
  22. #include "support.h"
  23.  
  24. #define GLADE_HOOKUP_OBJECT(component,widget,name) \
  25. g_object_set_data_full (G_OBJECT (component), name, \
  26. gtk_widget_ref (widget), (GDestroyNotify) gtk_widget_unref)
  27.  
  28. #define GLADE_HOOKUP_OBJECT_NO_REF(component,widget,name) \
  29. g_object_set_data (G_OBJECT (component), name, widget)
  30.  
  31. GtkWidget*
  32. create_window1 (void)
  33. {
  34. FILE *fichier = NULL;
  35. fichier = fopen("test.txt", "a+");
  36. GtkWidget *window1;
  37. GtkWidget *vbox1;
  38. GtkObject *spinbutton1_adj;
  39. GtkWidget *spinbutton1;
  40. GtkWidget *bouton;
  41.  
  42. window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  43. gtk_window_set_title (GTK_WINDOW (window1), _("window1"));
  44.  
  45. vbox1 = gtk_vbox_new (FALSE, 0);
  46. gtk_widget_show (vbox1);
  47. gtk_container_add (GTK_CONTAINER (window1), vbox1);
  48.  
  49. spinbutton1_adj = gtk_adjustment_new (0, 0, 100, 1, 10, 10);
  50. spinbutton1 = gtk_spin_button_new (GTK_ADJUSTMENT (spinbutton1_adj), 1, 0);
  51. gtk_widget_show (spinbutton1);
  52. gtk_box_pack_start (GTK_BOX (vbox1), spinbutton1, FALSE, FALSE, 0);
  53. //en dessous je met la valeur de spinbutton1 et spinbutton1_adj
  54. fprintf(fichier,"%d\n%d\n%d\n%d", spinbutton1, spinbutton1_adj, &spinbutton1, &spinbutton1_adj);
  55.  
  56. bouton = gtk_check_button_new_with_mnemonic (_("checkbutton1"));
  57. gtk_widget_show (bouton);
  58. gtk_box_pack_start (GTK_BOX (vbox1), bouton, FALSE, FALSE, 0);
  59. //pareil pour bouton
  60. fprintf(fichier,"%d\n%d", bouton, &bouton);
  61.  
  62.  
  63. /* Store pointers to all widgets, for use by lookup_widget(). */
  64. GLADE_HOOKUP_OBJECT_NO_REF (window1, window1, "window1");
  65. GLADE_HOOKUP_OBJECT (window1, vbox1, "vbox1");
  66. GLADE_HOOKUP_OBJECT (window1, spinbutton1, "spinbutton1");
  67. GLADE_HOOKUP_OBJECT (window1, bouton, "bouton");
  68.  
  69. return window1;
  70. }


j'ai juste rajouté les fprintfs et les commentaires (l 53-54 et 59-60)
Sinon le projet en entier, vous pouvez le tester svp (on sait jamais ça peut fonctionner autre part :p )
http://ptitcois35.free.fr/project2.zip

Voila, merci de vos futur réponses

Autres pages sur : probleme gtk glade valeurs eronnees

a b L Programmation
11 Février 2008 22:10:08

Tu es à la création des objets ici, donc tu enregistre la valeur initiale. Comment gères-tu le signal "changed" ? :) 
12 Février 2008 07:35:00

euh désolé je ne m'y connais pas trop en GTK, il y a des objet dans le C avec GTK?, c'est quoi le signal "changed" ? :) 
Contenus similaires
a b L Programmation
12 Février 2008 20:41:55

Tu crées de objets graphiques (que j'appelle widget) dans ta fonction, mais aucune fonction n'est attachée aux actions des widgets. Tout ce que tu fait n'a aucune incidence sur rien, il faut gérer les actions. Pour ceci, gtk utilise les signaux: tu associes un type de signal à une fonction (que tu écris). Quand l'utilisateur modifiera un widget, un signal est émis par ce widget, et donc ta fonction que tu a lié au signal sera appelée.
lorsque l'utilisateur changera ton spin, le signal "changed" est envoyé. Dans ton cas, tu n'y a rien connecté, alors ça ne fait rien.
la fonction pour connecter est un truc du genre signal_connect (mais c'est pas exactement ça). Je te suggère de rechercher un tutorial simple pour expliquer les signaux.
13 Février 2008 07:31:33

Merci beaucoup, tu me débloque CRicky.
Si j'ai bien compris le signal_connect sert a par exemple si on clique sur un bouton => tel ou tel fenetre s'ouvre non ?
Je ais rechercher cette appremidi

Sinon est-ce que tu penses qu'il faut que j'apprennne la GTK ? avec toutes les fonction les plus importantes (comme sur le siteduzero ?)
a b L Programmation
13 Février 2008 20:18:05

C'est le principe et le fonctionnement qu'il faut connaitre. Apprendre les objets, les noms de fonctions ne sert à rien.
Pour le bouton, tu fais ce que tu veux puisqu'au signal tu connecte une fonction que tu écris, donc, tu y fais ce que tu veux (comme lancer une fenêtre).
13 Février 2008 21:01:56

Je me suis enseigné sur internet, j'ai compris le modde de fonctionnement (en fait la fonction est "g_signal_connect"), mais c'est plus pour les fonction "output" que j'ai du mal.
J'ai recherché sur google mais je n'ai trouvé que des tutos en anglais et je ne comprend pas très bien l'anglais.
Sinon il y a le tuto sur le site du zéro mais je ne le trouve pas très complet (on ne parle pas de "spinbutton", de "combobox" etc.).
Voila donc si vous connaissez des Tutos en français de préférence je suis preneur :D 
EDIT: j'ai trouvé la fonction de sortie du spin button (gtk_spin_button_get_value_as_int ) mais je ne sais pas comment l'utiliser.
Sinon dans l'onglet "signal" de glade il y a plusieur fonctions, mais gtk_spin_button_get_value_as_int n'y est pas donc si vous savez l'utilisez (et celle pour les comboboxes) n'hésites pas.
Merci
a b L Programmation
13 Février 2008 22:51:04

En fait dans ta fonction que tu as connecté avec le signal changed, tu utilises la fonction gtk_spin_button_get_value_as_int pour connaitre dynamiquement la nouvelle valeur du spin.
Pour t'entrainer tu peux changer le contenu d'un deuxième spin box, lorsque le premier change. Ne fais pas la même chose avec l'autre, ça risque de partir en boucle infinie :) 
14 Février 2008 07:43:56

ok mais comment on l'utilise gtk_spin_button_get_value_as_int ?
a b L Programmation
14 Février 2008 19:58:31

Tu donnes en paramètre un pointeur sur ton objet (spinbutton1), qui du coup doit être une variable globale, puisque tu n'es plus dans ta fonction de création.
14 Février 2008 20:11:26

Mais avant je dois faire un signal qui mène vers une fonction ?
Si ou je peux mettre en parametre ce pointeur non ?
Tu peux pas faire un petit code archi simplifié (fait en 3 min) pour que je vois l' "architecture", sinon c'est quoi l'équivalent de gtk_spin_button_get_value_as_int pour un combobox ?
15 Février 2008 21:56:43

euhh c'est de l'anglais :p 
Mais bon je vais essayer de traduire ça.
Sinon (il y est peut etre sur le lien) tu connaiterais pas un site ou il explique chaque signal (ex delete-event, la petite croix) ?
a b L Programmation
16 Février 2008 11:31:35

Désolé, mais pour moi une doc en français ne vaut pas grand chose, alors je n'en connais pas :) 
16 Février 2008 12:09:20

ok, merci je vais essayer de faire ça, sinon: go C++ !
2 Septembre 2008 22:32:44

Peux-tu noter que "erronée" (au féminin singulier) s'écrit... "erronée" et corriger le titre du fil en conséquence ? MERCI;
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS