Tom's Guide > Forum > Programmation > probleme C -> GTK -> glade: Valeurs éronnées

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

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

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

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":

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



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

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

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

------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

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" ? :)

Répondre à ptitcois

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.

------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

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 ?)


Message édité par ptitcois le 13-02-2008 à 07:45:12
Répondre à ptitcois

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).

------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

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


Message édité par ptitcois le 13-02-2008 à 21:09:57
Répondre à ptitcois

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 :)

------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

ok mais comment on l'utilise gtk_spin_button_get_value_as_int ?

Répondre à ptitcois

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.

------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

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 ?

Répondre à ptitcois

Je te conseille de suivre un tutorial ça te sera plus simple.
http://library.gnome.org/devel/gtk-tutorial/stable/

------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

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) ?

Répondre à ptitcois

Désolé, mais pour moi une doc en français ne vaut pas grand chose, alors je n'en connais pas :)

------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

ok, merci je vais essayer de faire ça, sinon: go C++ !

Répondre à ptitcois
- 0 +

Peux-tu noter que "erronée" (au féminin singulier) s'écrit... "erronée" et corriger le titre du fil en conséquence ? MERCI;

Répondre à glin
Tom's Guide > Forum > Programmation > probleme C -> GTK -> glade: Valeurs éronnées
Aller à :

Il y a 648 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens