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 :

GUI problème basique [Débutant]


Sujet :

Interfaces Graphiques

  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2008
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 90
    Par défaut GUI problème basique
    Bonjour,

    Je débute tout juste avec le GUI. Pour ma première réalisation, j'ai voulu faire le compteur donné dans les tutoriaux mais j'obtiens l'erreur suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    "??? Error using ==> getappdata
    Invalid object handle.
     
    Error in ==> Compter>retrancher at 61
    Compteur = getappdata(gcbf,'Valeur_compteur');
     
    ??? Error while evaluating uicontrol Callback"
    De plus, qu'est ce que "obj" et "event" dans la fonction "retrancher"?

    Pouvez-vous m'aider?

    Voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    % Réalisation d'un compteur
    % -------------------------
     
    % FONCTION PRINCIPALE
    % -------------------
     
    function Compter
     
    % Création de l'objet figure
     
    figure('units','pixels',...
        'position',[250 250 400 300],...
        'color',[0.2 0.4 0.6],...
        'numbertitle','off',...
        'name','Compteur',...
        'menubar','none',...
        'tag','interface');
     
    % Création du bouton push -
     
    uicontrol('style','pushbutton',...
        'units','normalized',...
        'position',[0.2 0.1 0.1 0.05],...
        'string','-',...
        'callback',@retrancher,...
        'tag','Bouton-');
     
    % Création du boutton push +
     
    uicontrol('style','pushbutton',...
        'units','normalized',...
        'position',[0.8 0.1 0.1 0.05],...
        'string','+',...
        'callback',@ajouter,...
        'tag','Bouton-');
     
    % Création de l'objet résultat
     
    uicontrol('style','text',...
        'units','normalized',...
        'position',[0.5 0.3 0.1 0.05],...
        'string','0',...
        'tag','Résultat');
     
    % Initialisation du compteur
     
    Compteur = 0;
    setappdata(gcf,'Valeur_compteur',Compteur); % Enregistrement de la valeur du compteur dans les données d'application de l'objet figure
    % gcf permet de donner l'identifiant de la figure en cours
     
    % FONCTION RETRANCHER
    % -------------------
     
    function retrancher(obj,event)
     
    % Récupération directe de la valeur du compteur depuis les données
    % d'application de l'objet figure contenant l'objet graphique dont l'action
    % est exécutée (gcbf)
     
    Compteur = getappdata(gcbf,'Valeur_compteur');
    Compteur = Compteur - 1;
     
    % Récupération de l'identifiant de l'objet Résultat
     
    h = findobj('parent',gcbf,'style','text','tag','Résultat');
     
    % modification de sa propriété string
    set(h,'string',num2str(Compteur));
     
    % Enregistrement de la nouvelle valeur du compteur
    setappdata(gcf,'Valeur_compteur',Compteur');
     
     
    % FONCTION AJOUTER
    % ----------------
     
    function ajouter(obj,event)
     
    % Récupération directe de la valeur du compteur depuis les données
    % d'application de l'objet figure contenant l'objet graphique dont l'action
    % est exécutée (gcbf)
     
    Compteur = getappdata(gcbf,'Valeur_compteur');
    Compteur = Compteur + 1;
     
    % Récupération de l'identifiant de l'objet Résultat
     
    h = findobj('parent',gcbf,'style','text','tag','Résultat');
     
    % modification de sa propriété string
    set(h,'string',num2str(Compteur));
     
    % Enregistrement de la nouvelle valeur du compteur
    setappdata(gcf,'Valeur_compteur',Compteur');

  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 317
    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 317
    Par défaut
    Citation Envoyé par MTN84 Voir le message
    Voici mon code:
    Ce code fonctionne parfaitement...
    Citation Envoyé par MTN84 Voir le message
    De plus, qu'est ce que "obj" et "event" dans la fonction "retrancher"?
    La variable obj contient l'identifiant (handle) de l'objet courant.

    Par exemple, si tu associes le callback suivant à un bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function button_cb(obj,event)
    alors la variable obj sera l'identifiant du bouton.


    Pour event, c'est un peu moins important.

    En fait ça se rapproche plus du fonctionnement des interfaces graphiques sous Java. On associe aux objets des événement (le bouton est appuyé, le bouton est relâché,...). Sous MATLAB, on utilise rarement cette variable dans les callbacks (du moins au début)

    Mais, lorsqu'on utilise cette forme d'appel à 2 variables pour le Callback, le premier représente impérativement l'identifiant de l'objet, le second, la variable avec les événements et les deux arguments sont obligatoires

    Je ne sais pas si je suis très clair dans mes explications

  3. #3
    Membre émérite Avatar de tubaas
    Homme Profil pro
    Acousticien
    Inscrit en
    Août 2009
    Messages
    641
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Acousticien
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2009
    Messages : 641
    Par défaut
    en ce qui concerne obj et evnt tu es obligé de les mettre à moins d'utiliser une syntaxe différente
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    uicontrol('style','pushbutton',...
        'units','normalized',...
        'position',[0.2 0.1 0.1 0.05],...
        'string','-',...
        'callback',@(obj,evnt)retrancher(),...
        'tag','Bouton-');
    car ils sont envoyés par Matlab lors de l'appel du callback (tu obtiens une erreur sinon).
    il te renvoie un message d'erreur car il a visiblement un problème de handle avec gcbf qui est la figure d'où provient le callback. je ne vois pas trop pourquoi. si tu n'ouvres pas d'autres fenêtres ouvertes tu peux peut-être essayer gcf mais ce n'est pas une solution viable

  4. #4
    Membre confirmé
    Inscrit en
    Novembre 2008
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 90
    Par défaut
    Merci pour ces explications. Mais Dut, quand tu dis que ce code fonctionne parfaitement, tu parles du mien? Car j'ai toujours ce message d'erreur. J'avais essayé gcf car je n'ai qu'une figure, j'avais même créé une variable pour l'identifiant de la figure (A = figure ...) et dans ce cas, il me met que cette variable n'est pas définie quand je l'utilise dans getappdata, à croire qu'elle s'efface en cours de chemin.

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Citation Envoyé par MTN84 Voir le message
    Mais Dut, quand tu dis que ce code fonctionne parfaitement, tu parles du mien?
    Oui.

    Je peux même lancer plusieurs fois le programme pour avoir plusieurs compteurs indépendants ouverts en même temps

  6. #6
    Membre confirmé
    Inscrit en
    Novembre 2008
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 90
    Par défaut
    Je ne sais si je dois me réjouir ou pas! Ca ne fonctionne pas chez moi!

  7. #7
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    GCF correspond à l'identifiant de la fenêtre courante (en gros, la fenêtre MATLAB qui apparait au dessus des autres)

    GCBF correspond à l'identifiant de la fenêtre contenant l'objet courant (la fenêtre contenant le bouton sur lequel tu viens de cliquer par exemple)

  8. #8
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Et que te donnes :
    Je dis ça à tout hasard....

  9. #9
    Membre émérite Avatar de tubaas
    Homme Profil pro
    Acousticien
    Inscrit en
    Août 2009
    Messages
    641
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Acousticien
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2009
    Messages : 641
    Par défaut
    soit dit en passant ceci
    Citation Envoyé par MTN84
    j'avais même créé une variable pour l'identifiant de la figure (A = figure ...) et dans ce cas, il me met que cette variable n'est pas définie quand je l'utilise dans getappdata, à croire qu'elle s'efface en cours de chemin.
    est normal car tu n'es pas dans les mêmes fonctions donc pas dans le même espace d'adressage. il faut passer A en paramètre de ta fonction retrancher
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    uicontrol('style','pushbutton',...
        'units','normalized',...
        'position',[0.2 0.1 0.1 0.05],...
        'string','-',...
        'callback',@(obj,evnt)retrancher(A),...
        'tag','Bouton-');
    %...
    function retrancher(fig)

  10. #10
    Membre confirmé
    Inscrit en
    Novembre 2008
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 90
    Par défaut
    Ca fonctionne! Il suffisait de relancer le PC!
    Merci pour toutes vos réponses qui m'ont permises de voir plus clair!

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

Discussions similaires

  1. [PHP-JS] Problèmes basiques sous php
    Par fbourdon dans le forum Langage
    Réponses: 3
    Dernier message: 04/04/2008, 00h47
  2. [Qt4 GUI]Problème Affichage bloquant
    Par Gulish dans le forum Qt
    Réponses: 25
    Dernier message: 19/03/2008, 15h06
  3. [URL Rewriting] Petit problème "basique"
    Par Bloodscalp dans le forum Apache
    Réponses: 6
    Dernier message: 20/02/2008, 17h58
  4. [PHP-JS] Problème basique de fonction !
    Par Justin_C dans le forum Langage
    Réponses: 8
    Dernier message: 26/12/2006, 10h35
  5. Problème basique XSL
    Par tarrant17 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 23/02/2006, 13h32

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