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 :

Manipulation des variables dans une interface graphique


Sujet :

Interfaces Graphiques

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Manipulation des variables dans une interface graphique
    Bonjour à tous,

    Je souhaiterais créer une interface graphique simple permettant de charger une séquence d'images, d'afficher la première puis de passer d'une image à l'autre en appuyant sur des boutons. Je fais appel à vous car je rencontre des difficultés à récupérer des variables créées dans les fonctions callback.
    Le code permettra de d'y voir plus clair.

    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
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
     
     
    function test
     
      hfig = figure('units','normalized',...
        'position',[0 0 1 1],...
        'color',[0.8 0.8 0.8],...
        'numbertitle','off',...
        'name','Interface Matlab',...
        'menubar','none',...
        'tag','interface');
     
      handles.ax1 = axes('units','normalized',...
        'position',[0.1 0.1 0.6 0.8],...
        'color',[1 1 1],...
        'tag','image');
     
     
      handles.bt1 = uicontrol('style','pushbutton',...
        'units','normalized',...
        'position',[0.8 0.5 0.08 0.08],...
        'string','Load File',...
        'callback', @LoadFile, ...
        'tag','LoadFile');
     
      handles.bt2 = uicontrol('style','pushbutton',...
        'units','normalized',...
        'position',[0.85 0.4 0.08 0.08],...
        'string','Next Image',...
        'callback',@NextImage,...
        'tag','NextImage');
     
      handles.bt3 = uicontrol('style','pushbutton',...
        'units','normalized',...
        'position',[0.75 0.4 0.075 0.075],...
        'string','Prev Image',...
        'callback',@PrevImage,...
        'tag','PrevImage');
     
    handles = guihandles(hfig);
    guidata(hfig, handles);
     
    %% Function ReadImage
     
        function ReadImage(hfig, handles, fullpathname)
     
            handles = guihandles(hfig);
            fullpathname = get(handles.fullpathname,'String');
     
            I = imread(fullpathname);
            I = im2double(I);
            imshow(I,'Parent', handles.ax1);
            set(handles.I, 'String', mat2str(I));
            guidata(hfig, handles);    
     
        end
     
    %% Function LoadFile
     
        function LoadFile(hfig, handles)
     
            handles = guihandles(hfig);
            [filename,pathname] = uigetfile({'*.*'},'Select Images');
            if  isequal(filename,0)
                disp('Image not acquired');
            else
                disp('Image acquired');
            end
     
            filelist = dir(pathname);
            namelist={};
            cnum = 1;
     
            for  i=3:size(filelist,1)      
                namelist{cnum,1}=filelist(i,1).name;
                cnum=cnum+1;
            end
     
            cnum = 1;
            filename = namelist{cnum,1};
            fullpathname = strcat(pathname, filename);
     
            [tnum,x] = size(namelist);
     
            set(handles.fullpathname, 'String', fullpathname);
            set(handles.cnum, 'String', num2str(cnum));
            set(handles.tnum, 'String', num2str(tnum));
     
            guidata(hfig, handles);
            ReadImage
     
        end
     
    %% Function NextImage
     
        function NextImage(hfig, eventdata, handles)
     
            handles = guihandles(hfig);
            cnum = get(handles.cnum, 'String');
            cnum = str2num(cnum); 
            tnum = get(handles.tnum, 'String');
            tnum = str2num(tnum);
     
            if cnum < tnum
                cnum = cnum + 1;
                set(handles.cnum, 'String', num2str(cnum));
                guidata(hfig, handles);
                ReadImage;
            else
                disp('Last Image');
            end
     
        end
     
    %% Function PrevImage
     
        function PrevImage(hfig, eventdata, handles)
     
            handles = guihandles(hfig);
            cnum = get(handles.cnum, 'String');
            cnum = str2num(cnum);        
     
            if cnum > 1
                cnum = cnum - 1;
                set(handles.cnum, 'String', num2str(cnum));
                ReadImage;
            else
                disp('First Image');
            end
     
        end
     
    end
    La variable fullpathname est créée dans la fonction callback LoadFile et je souhaite la réutiliser dans la fonction callback ReadImage. Cependant, le message d'erreur suivant s'affiche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    No appropriate method, propert, or field 'fullpathname' for class 'matlab.ui.eventdata.ActionData'.
     
    Error in test/LoadFile (line 81)
        set(handles.fullpathname, 'String', fullpathname);
    J'ai également parcouru les autres discussions du forum pour chercher une solution à mon problème et relu maintes et maintes fois le tutoriel sur le développement des interfaces graphiques, mais je n'y arrive toujours pas
    Est-il possible de récupérer des variables dans les fonctions callback ou les variables doivent-elles être seulement présentes dans la fonction principale ?

    Merci de votre aide !

  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 309
    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 309
    Points : 52 895
    Points
    52 895
    Par défaut
    Les fonctions set et get sont uniquement utilisées pour modifier ou accéder aux propriétés des objets graphiques.

    LA variables handles est une structure qui contient à la fois les identifiants des objets et d'autres données.

    Dans ton cas, remplace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set(handles.fullpathname, 'String', fullpathname);
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    handles.fullpathname = fullpathname;
    Et :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fullpathname = get(handles.fullpathname,'String')
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fullpathname = handles.fullpathname;

Discussions similaires

  1. Ecrasement d'une variable créée dans une interface graphique
    Par Adjen dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 06/11/2014, 12h40
  2. afficher des variables dans une interface graphique
    Par massi15301 dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 15/03/2012, 12h02
  3. Réinitialisation de variables dans une interface graphique
    Par kicao dans le forum Interfaces Graphiques
    Réponses: 4
    Dernier message: 11/01/2009, 14h45
  4. Intégrer des programmes dans une interface graphique avec GUIDE
    Par maserati222e dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 24/05/2007, 11h30

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