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 :

Echanger variables entre fonctions


Sujet :

Interfaces Graphiques

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2015
    Messages : 14
    Points : 15
    Points
    15
    Par défaut Echanger variables entre fonctions
    Bonjour,

    j'ai un problème concernant le fait d'échanger des variables entre différentes fonctions. Je précise que je ne veux pas utiliser " global " pour définir mes variables.

    J'utilise donc handles.variable = variable; guidata(hObject, handles); dans la fonction où la variable est définie, puis variable = handles.variable pour récupérer ma variable dans l'autre fonction.

    Cependant j'ai un problème. Je m'explique :

    Disons que j'ai 3 fonctions (pour simplifier mon interface) :
    - celle de création de mon interface (je ne crée pas mes éléments avec Guide mais directement en ligne de code, c'est plus pratique)
    - celle d'un pushbutton1
    - celle d'un pushbutton2.

    Dans la première, après avoir créé mon interface et désactivé le pushbutton2, j'écris : handles.pushbutton2 = pushbutton2; guidata(hObject, handles); pour pouvoir activer le pushbutton2 plus tard.
    Dans le callback du pushbutton1, j'active le pushbutton2 après l'avoir récupéré avec : pushbutton2 = handles.pushbutton2;Dans ce même callback, je définis une variable, que je veux récupérer dans le callback du pushbutton2, disons : x=1; handles.x=x; guidata(hObject, handles);Désormais, je veux récupérer cette variable x dans le callback du pushbutton2 avec : x = handles.xLorsque je lance le programme et que je clique sur le bouton 2... Impossible d'obtenir ma variable x ! On me dit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Error using interface>pushbutton2_Callback (line 183)
    Not enough input arguments.
     
    Error while evaluating UIControl Callback
    Je précise que le callback de mon pushbutton est de la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function pushbutton1_Callback(hObject, eventData, handles)
    	x = handles.x
    end
    et qu'en tout début d'initialisation de mon interface il y a déjà écrit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    % Choose default command line output for interface
    handles.output = hObject;
     
    % Update handles structure
    guidata(hObject, handles);
    Comment puis-je remédier à mon problème ?
    Merci d'avance pour vos réponses.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 883
    Points
    52 883
    Par défaut
    D'une part, quand tu écris guidata(hObject, handles);, la variable hObject doit (quasiment) toujours contenir l'identifiant du même objet. On choisi en générale l'objet Figure.

    D'autre part, si tu codes l'interface à la main, la forme pushbutton1_Callback(hObject, eventData, handles) nécessite de renseigner le callback de l'objet avec un tableau de cellules :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    uicontrol(..., ...
                 'callback', {@pushbutton1_Callback, handles })
    Plus d'information dans la FAQ : Comment utiliser une fonction callback ?

    Tu peux faire plus simple en t'inspirant de l'exemple suivant : http://briot-jerome.developpez.com/m...aphiques/#L2.3

    Pour finir, il n'y a aucun intérêt à faire :

    Utilises simplement handles.x dans le reste du code.
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

Discussions similaires

  1. Transmettre variable entre fonctions
    Par redah75 dans le forum jQuery
    Réponses: 6
    Dernier message: 08/11/2015, 17h47
  2. Transfert de variable entre fonction
    Par pominus dans le forum jQuery
    Réponses: 6
    Dernier message: 16/06/2014, 14h28
  3. Partage de variable entre fonction
    Par FotoXe33 dans le forum Général JavaScript
    Réponses: 32
    Dernier message: 09/12/2011, 19h28
  4. [Toutes versions] Echange de variables entre plusieurs fonctions
    Par vivi4561 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/10/2009, 16h40
  5. Problème d'appels d'une variable entre fonctions
    Par julien.nasser dans le forum MFC
    Réponses: 12
    Dernier message: 26/04/2006, 09h23

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