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 :

Problème de handles


Sujet :

Interfaces Graphiques

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Points : 75
    Points
    75
    Par défaut Problème de handles
    Bonjour

    voila je pensais avoir bien lu tuto 'developement efficace des interfaces graphiques graphiques sous matlab' mais non
    Suite à ce tuto j'ai choisi d'utiliser la méthode guihandles et guidata.

    grosso modo je n'arrive pas à récupérer la string d'un popupmenu lorsque j'appuie sur le bouton TEST

    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
    %création du bouton TEST
    uicontrol ('style', 'pushbutton', 'units', 'pixels', 'position',...
        [5, 760, 30, 15], 'string', 'Test!', 'tag', 'parcourir'...
        , 'callback', @test);
     
    %création du popupmenu 'version'
        uicontrol ('style', 'popupmenu', 'units','pixels',...
            'position', [ifile+5, jfile+ljfile-35, 70, 15],...
            'tag', 'popup_version', 'string', ['MATLAB';'OCTAVE']);
     
    data = guihandles (gcf);
    guidata (gcf, data);
     
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    function test (obj, event)
    data = guidata (gcbf);
    assignin ('base','data',data);
    load param.mat
     
    VERSION = get (data.popup_version, 'string')
    Dès que je clique sur le bouton on me répond que popup_version n'existe pas!
    alors que quand je vérifie dans data il existe bel et bien!

    Merci d'avance!

  2. #2
    Expert éminent sénior
    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
    Points : 14 828
    Points
    14 828
    Par défaut
    Rapidement, est-ce que par le plus grand des hasards il n'y aurait pas une variable s'appelant data dans ton fichier param.mat ?
    As-tu essayé en enlevant la ligne avec le LOAD ?


    NB : je te déconseille d'appeler ta variable VERSION car c'est le nom d'une fonction MATLAB.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Points : 75
    Points
    75
    Par défaut
    Bon à priori il semble que load et guidata ne s'apprécient pas beaucoup...
    parce que qu'une fois load quoté, tout a marché correctement. Merci!!

    Donc si d'autres personnes ont ce problème je l'ai réglé en utilisant la fonction findobj. C'est plus fastidieux à écrire mais jusque là ça marche!

    Sinon je viens de m'apercevoir d'un autre problème que j'ai avec les handles de mes axes.

    j'ai déclaré deux axes, taggé im1 et im2 et un bouton. Quand je clique sur le bouton je peux choisir mon fichier image à lire ( avec uigetfile), ensuite l'image est affiché dans un des axes avec imagesc. Le problème c'est que cette opération ne fonctionne qu'une fois : une fois la première image affiché, si je réitère l'opération l'axes n'est plus reconnue??!!

    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
     
    %création de l'objet image
    axes ('units', 'pixels', 'position', [0,0,512,512],...
        'tag', 'im1');
     
    %création de l'objet image2
    axes ('units', 'pixels', 'position', [512,0,512,512],...
    'tag', 'im2');
     
     
    %création d'un bouton
    uicontrol ('style', 'pushbutton', 'units','pixels',...
        'position',[10, 770, 50, 20], 'string', 'Push!',...
        'callback',@push...
        ,'tag', 'push_btn');
     
    data = guihandles (gcf);
    guidata (gcf, data);
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
    function push (obj, event)
    data = guihandles (gcbf);
     
    [stack, repertoire] = uigetfile ('.tif',...
        'select the stack you wich to analyse'...
        ,'C:\Program Files (x86)\MATLAB71\work\Olivier\Fresh data\') ;
     
    set (data.repertoire, 'string', num2str([repertoire, stack]));
     
    a = imread ([repertoire, stack]);
    axes (data.im2);
    imagesc (a,'parent',data.im2);
    Merci d'avance!

  4. #4
    Expert éminent sénior
    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
    Points : 14 828
    Points
    14 828
    Par défaut
    Ce n'est pas que LOAD et GUIDATA ne s'entendent pas.
    C'est qu'a priori dans le fichier param.mat tu dois avoir une variable data qui efface donc la variable data précédente récupérée avec GUIDATA. Tu comprends ?

    Une possibilité pour contourner ce problème (si tu as besoin du LOAD) serait d'utiliser la forme fonctionnelle de LOAD avec un arguement de sortie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    data = guidata (gcbf);
    assignin ('base','data',data);
    param=load('param.mat');%l'accès aux données se fait alors avec param.(nom de la variable)
    Pour les axes, ce n'est pas un bug, c'est une feature.
    L'appel à IMAGE va resetter les propriétés de tes axes (dont la propriété Tag).
    Je n'arrive plus à retrouver le lien qui expliquerait cela.
    Je continue à chercher mais peux-tu nous donner le message d'erreur exact ?

  5. #5
    Expert éminent sénior
    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
    Points : 14 828
    Points
    14 828

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Points : 75
    Points
    75
    Par défaut
    A oui désolé j'avais pas vu que je chargé à chaque fois un vieux fichier... Aprés coup ma question parait stupide...

    Sinon merci pour le link en rajoutant 'nextplot','replacechildren' tout marche correctement

    Donc un grand merci

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

Discussions similaires

  1. [GUIDE] problème de handles
    Par El_bennito dans le forum Interfaces Graphiques
    Réponses: 7
    Dernier message: 03/07/2009, 13h02
  2. Problème création handle
    Par maicheul dans le forum Débuter
    Réponses: 6
    Dernier message: 16/06/2009, 23h04
  3. problème de handle dans le callback d'un bouton
    Par ZeFMG dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 04/11/2008, 12h48
  4. GUI & Timer => problème d'handle sur la figure
    Par wintereivax dans le forum Interfaces Graphiques
    Réponses: 10
    Dernier message: 13/01/2008, 22h20
  5. Send/PostMessage problème de handle
    Par bibmari dans le forum C++Builder
    Réponses: 18
    Dernier message: 21/06/2005, 17h55

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