IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GTK+ avec C & C++ Discussion :

modifier valeur vslider GIW


Sujet :

GTK+ avec C & C++

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    226
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 226
    Par défaut modifier valeur vslider GIW
    Salut!

    j'ai un petit souci, j'aimerai modifier constamment la valeur indiquée par un vertical slider de la librairie GIW.

    J'utilise la fonction g_timeout_add qui appelle en boucle ma fonction "mouvement".

    dans cette fonction je fait giw_vslider_set_value(w,pos); où pos c'est ma nouvelle valeur.

    mais la valeur ne change pas! si je fait la même chose mais au niveau d'une fonction de callback ça marche très bien....

    je peut faire comment pour demander le reaffichage en étant dansla fonction "mouvement"??

  2. #2
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Bonjour,

    J'ai trouvé ce code là sur sourceforge :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void
    giw_vslider_set_value (GiwVSlider *vslider,
    			gdouble value)
    {
      g_return_if_fail (vslider != NULL);
      g_return_if_fail (GIW_IS_VSLIDER (vslider));
     
      if (vslider->adjustment->value!=value){
        vslider->adjustment->value=value;
     
        gtk_adjustment_value_changed(vslider->adjustment);
      }
    }
    Si c'est bien ça, il ne faut pas utiliser directement les champs de la structure GtkAdjustment mais passer par les fonctions get/set (soit g_object_get/g_objec_set soit, quand elles existent, les swapper correspondant).

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    226
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 226
    Par défaut
    Salut!
    d'abord merci beaucoup pour la réponse!

    mais en faite j'utilise la fonction giw_vslider_set_value...
    et en paramètre je passe bien mon widget GiwVSlider et ma valeur
    gdouble ....

    le problème c'est que appairement l'interface ne se modifie pas au moins que se soit une fonction de callback qui le demande... dans un autre forum j'ai trouvé le conseil d'utiliser la fonction gdk_window_process_all_updates() mais dans mon cas ça ne marche pas....

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par défaut
    Les fonctions appelées par g_timeout_add sont des fonctions callback aussi. C'est quoi que tu appelles "des fonctions de callback" dans ta description du pb ? Tu n'utilises pas de threads par hasard ?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    226
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 226
    Par défaut
    Salut!
    je n'utilise pas des threads.

    des fonctions de callback sont des fonctions qui sont appelée directement depuis les objectas de l'interface.

    j'ai une fonction O_Demarrer qui vient appelée depuis un application externe, cette fonction contient la ligne g_timeout_add(500,Mouvement,(gPointer)var);.

    Mouvement est une fonction qui contient les lignes:

    w=glade_xml_get_widget(xml,"hsSlider");
    giw_vslider_set_value(GIW_VSLIDER(w), 5);

    Comme ça il ne veut pas modifier la valeur su slider.

    Si je mets ces deux lignes dans une fonction bi_clicked liée a un bouton ça fonctionne...

    Je crois qu'il faut obliger l'interface à se rafraichir...chose qu'elle vient
    fait automatiquement quand l'appel vient directement depuis elle...

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par défaut
    Hmm, je ne comprends pas trop comment ça marche quand tu dis que ta fonction O_Demarrer est appelée par un programme externe ? Sinon, peut être que ton problème vient tout simplement d'un objet invaide que tu récupèrerais dans ton callback, ie ce que tu penses être un objet de type GladeXML n'est en fait pas un objet de ce type à cause d'un bug dans ton programme ? Il n'y a pas d'avertissements dans la console ?

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    226
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 226
    Par défaut
    mh, je ne comprend pas très bien ce que tu veut dire avec object invalide...

    La fonction O_Demarrer vient appelée depuis un autre fichier C, qui s'exécute en même temps que mon interface.
    Mais ça ce ne devrait pas être un problème normallement...

    Pour la fonction Mouvement je n'ai pas d'erreurs à la console.

    Par contre je n'ai un pour une autre fonction, get_position. Elle se trouve au même niveau que Mouvement .
    Elle fait :

    xml=glade_xml_new("fenetre.glade", NULL, NULL);
    w=glade_xml_get_widget(xml,"hsSlider");
    giw_vslider_get_value(GIW_VSLIDER(w));


    Mais je suis obligée de rappeler glade_xml_new autrement il met des erreurs :

    glade_xml_get_widget : assertion 'self != NULL failed
    giw_vslider_get_value: assertion 'self != NULL failed


    il est bizarre car xml est une variable globale connaissant déjà le fichier .glade....

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    226
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 226
    Par défaut
    je me corrige!

    les erreurs de

    glade_xml_get_widget : assertion 'self != NULL failed
    giw_vslider_get_value: assertion 'self != NULL failed

    sont causé bêtement...car l'autre programme essayé de lire avant que l'interface soit ouverte! et effectivement teuf13 a raison, je vais lire un objet invalide...

    J'ai pu donc aussi enlever la ligne
    xml=glade_xml_new("fenetre.glade", NULL, NULL);

    et la modification de la position du slider marche...

    c'est enervant quant un petit erreur en cause 10 autres......

    merci vraiment beaucoup pour votre aide!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Zone de liste modifiable : valeur par défaut
    Par pafi76 dans le forum Access
    Réponses: 2
    Dernier message: 26/06/2006, 14h44
  2. Modifier valeur dans base en fermant formulaire
    Par yohannmonnier dans le forum Access
    Réponses: 19
    Dernier message: 18/06/2006, 13h43
  3. Modifier valeur Scale
    Par Invité dans le forum Tkinter
    Réponses: 2
    Dernier message: 07/06/2006, 14h49
  4. Réponses: 4
    Dernier message: 15/02/2006, 12h46
  5. Zone de liste modifiable + Valeur par défaut
    Par Frac dans le forum Access
    Réponses: 7
    Dernier message: 27/10/2005, 08h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo