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

Interfaces Graphiques Discussion :

affichage valeur slider et fonction callback [Débutant]


Sujet :

Interfaces Graphiques

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2015
    Messages : 2
    Points : 1
    Points
    1
    Par défaut affichage valeur slider et fonction callback
    Salut salut,

    Je bosse sur une interface graphique pour un programme d'automate cellulaire simulant la germination, et je rencontre un problème avec un slider.
    Voilà, j'arrive soit à afficher la valeur du slider dans l'interface, soit à récupérer sa valeur dans une fonction callback afin de l'utiliser dans mon code principal, mais pas les deux à la fois !
    Or il est indispensable que l'utilisateur voit la valeur en temps réel.

    Voici le code permettant de visualiser la valeur du slider

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    text1 = uicontrol(handles(1),'style','text',...
         'String',1,'Position', [220,100,60,30],...
         'BackGroundcolor','w'); %valeur du slider
     
    slider1 = uicontrol(handles(1),'style','slider',...
         'position', [180,80,140,30] , 'Min' , 0 , 'Max' , 8 , ...
         'callback' , 'set(text1,''String'', get(slider1 , ''value''))'); %slider
    Et celui permettant de récupérer sa valeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    text1 = uicontrol(handles(1),'style','text',...
         'String',1,'Position', [220,100,60,30],...
         'BackGroundcolor','w'); %valeur du slider
     
    slider1 = uicontrol(handles(1),'style','slider',...
         'position', [180,80,140,30] , 'Min' , 0 , 'Max' , 8 , ...
         'callback' , @Callback); %slider
    La fonction Callback étant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function Callback(hObject,eventdata)
     
    global Cooling_Rate
    % Gets the value of the parameter from the slider.
     
    h = findobj('style', 'slider');
    Cooling_Rate=get(h,'Value');
     
    end
    J'utilise alors la variable globale dans ma fonction principale.


    Quelqu'un aurait-il une solution à mon problème ?
    Merci d'avance !

    Guillaume.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Pour les raisons évoquées ici, je vais écarter la première solution, et passer direct à la seconde.

    Comme tu l'as fait dans la première partie, il te manque l'utilisation de set pour réinjecter la valeur récupérée dans ton objet Uicontrol Text.
    À noter que tu n'as pas besoin d'utiliser la fonction findobj, tu as directement le handle de ton slider en premier paramètre de la fonction callback : hObject.
    Ensuite tu peux faciliter l'obtention du handle de l'objet Uicontrol Text comme suit (cf. 3e point de mon lien précédent) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    slider1 = uicontrol(handles(1),...
        'Style', 'slider',...
        'Position', [180,80,140,30],...
        'Min', 0, ...
        'Max', 8,...
        'Callback', {@Callback, text1});
    puis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function Callback(hObject, ~, text1)
     
    set(text1, 'String', get(hObject, 'Value'))
     
    end
    Concernant le passage des variables à travers les différentes fonctions de l'interface, je te conseille la lecture de ce tutoriel.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2015
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Merci Winjerome pour ta réponse rapide et précise !

    J'ai modifié ma fonction Callback en me débarrant du findobj et ça marche super.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function Callback(hObject,eventdata,text1)
     
    global Cooling_Rate
     
    % Gets the value of the parameter from the slider.
     
    Cooling_Rate=get(hObject,'Value');
    set(text1, 'string', get(hObject, 'value'))
     
    end
    J'avais lu que la méthode des variables globales est déconseillée, mais c'est tellement plus simple pour un débutant comme moi

    Problème résolu !

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

Discussions similaires

  1. [WD15] affichage de formes en fonction valeur combo
    Par fr832 dans le forum WinDev
    Réponses: 3
    Dernier message: 19/09/2011, 03h16
  2. Réponses: 6
    Dernier message: 27/05/2010, 18h25
  3. affichage de champs en fonction de la valeur d'un selecton
    Par NicoO_O dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 09/11/2009, 10h21
  4. Changer valeur variable global dans une fonction callback
    Par bog333 dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 02/10/2008, 16h14
  5. affichage valeur d'un Slider
    Par djiwalloo dans le forum MFC
    Réponses: 4
    Dernier message: 24/11/2004, 11h28

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