Il existe 3 méthodes pour gérer les données dans une interface graphique. Pour illustrer cela, nous allons développer une interface graphique avec ces différentes méthodes.

 

Nous vous proposons de réaliser l’interface graphique suivant avec 3 méthodes de codage différentes.

L’interface graphique est un compteur très simple qui comporte une zone de texte (initialement à 0) et deux boutons (+ et -), permettant d’incrémenter le résultat (respectivement de +1 et -1).

 

 

La problématique est donc ici de gérer, d’une part l’incrémentation de la valeur courante du compteur et, d’autre part, de gérer les identifiants des deux boutons pour connaitre la valeur de l’incrémentation (+1 ou -1) lorsque l’utilisateur clique sur l’un ou sur l’autre.

 

Les données de l’interface

La fonction guidata permet de sauver ou de récupérer une seule donnée associée à l’interface (et à tous ses composants).

guidata(hObject, handles);

handles = guidata(hObject);

On peut ajouter des champs à cette variable.

Il faut toujours penser à appeler guidata pour sauver les modifications.

 

function gui_guidata_guihandles

% Création de l'objet Figure
figure('units','pixels',...
       'position',[250 250 500 500],...
       'color',[0.925 0.913 0.687],...
       'numbertitle','off',...
       'name','[GUI] Utilisation de GUIDATA',...
       'menubar','none',...
       'tag','interface');
 
% Création de l'objet Uicontrol Pushbutton -
uicontrol('style','pushbutton',...
          'units','normalized',...
          'position',[0.1 0.1 0.1 0.05],...
          'string','-',...
          'callback',@retrancher,...
          'tag','bouton_retrancher');

% Création de l'objet Uicontrol Pushbutton +
uicontrol('style','pushbutton',...
          'units','normalized',...
          'position',[0.3 0.1 0.1 0.05],...
          'string','+',...
          'callback',@ajouter,...
          'tag','bouton_ajouter');

% Création de l'objet Uicontrol Text résultat
uicontrol('style','text',...
          'units','normalized',...
          'position',[0.1 0.2 0.3 0.05],...
          'string','0',...
          'tag','resultat');
 
% Génération de la structure contenant les identifiants des objects graphiques dont la
% propriété Tag a été utilisée.
data=guihandles(gcf);

% D'après les Tag utilisés pour les objets graphiques crées précédemment, la structure data
% contient les champs suivant :
% data.interface
% data.resultat
% data.bouton_ajouter
% data.bouton_retrancher

% Initialisation de la variable représentant la valeur courante du compteur nCompteur à 0
% Note : nCompteur est ici un champ de la structure data
data.nCompteur=0;

% Enregistrement de data dans les données d'application de l'objet Figure
guidata(gcf,data);

% callbacks
function retrancher(obj,event)

% Récupération des données stockées dans les données d'application de l'objet Figure
% contenant l'objet graphique dont l'action est exécutée (gcbf)
data=guidata(gcbf);

% Diminution de la valeur de nCompteur
data.nCompteur=data.nCompteur-1;

% Modification de sa propriété String
set(data.resultat,'string',num2str(data.nCompteur));

% Enregistrement des données modifiées dans les données d'application de l'objet Figure
% contenant l'objet graphique dont l'action est exécutée (gcbf)
guidata(gcbf,data)

function ajouter(obj,event)

% Récupération des données stockées dans les données d'application de l'objet Figure
% contenant l'objet graphique dont l'action est exécutée (gcbf)
data=guidata(gcbf);

% Augmentation de la valeur de nCompteur
data.nCompteur=data.nCompteur+1;

% Modification de sa propriété String
set(data.resultat,'string',num2str(data.nCompteur));
 
% Enregistrement des données modifiées dans les données d'application de l'objet Figure
% contenant l'objet graphique dont l'action est exécutée (gcbf)
guidata(gcbf,data);

 

Les données de l’application

Les fonctions setappdata et getappdata permettent de sauver ou de récupérer des données associées aux composants de l’application.

setappdata(hObject, ‘MaVariable’, SaValeur);

SaValeur = getappdata(hObject, ‘MaVariable’);

On limite en général les données d’application à la figure et on utilise la fonction handles pour pointer vers les objects de l’IHM.

La fonction isappdata permet de tester l’existence d’une donnée d’application pour un objet.

La fonction rmappdata permet de détruire une donnée d’application pour un objet.

 

function gui_appdata_findobj

% Création de l'objet Figure
figure('units','pixels',...
       'position',[250 250 500 500],...
       'color',[0.925 0.913 0.687],...
       'numbertitle','off',...
       'name','[GUI] Utilisation de SETAPPDATA / GETAPPDATA',...
       'menubar','none',...
       'tag','interface');
 
% Création de l'objet Uicontrol Pushbutton -
uicontrol('style','pushbutton',...
          'units','normalized',...
          'position',[0.1 0.1 0.1 0.05],...
          'string','-',...
          'callback',@retrancher,...
          'tag','bouton_retrancher');

% Création de l'objet Uicontrol Pushbutton +
uicontrol('style','pushbutton',...
          'units','normalized',...
          'position',[0.3 0.1 0.1 0.05],...
          'string','+',...
          'callback',@ajouter,...
          'tag','bouton_ajouter');

% Création de l'objet Uicontrol Text résultat
uicontrol('style','text',...
          'units','normalized',...
          'position',[0.1 0.2 0.3 0.05],...
          'string','0',...
          'tag','resultat');
  
% Initialisation de la valeur représentant la valeur courante du compteur nCompteur à 0
nCompteur=0;

% Enregistrement direct de nCompteur dans les données d'application de l'objet Figure
setappdata(gcf,'valeur_de_nCompteur',nCompteur);

% Callbacks
function retrancher(obj,event)

% Récupération directe de nCompteur depuis les données d'application de l'objet Figure
% contenant l'objet graphique dont l'action est exécutée (gcbf)
nCompteur=getappdata(gcbf,'valeur_de_nCompteur');
% Diminution de la valeur de nCompteur
nCompteur=nCompteur-1;

% Récupération de l'identifiant de l'objet Uicontrol Text résultat enfant de l'objet Figure
% contenant l'objet graphique dont l'action est exécutée (gcbf)
h=findobj('parent',gcbf,'style','text','tag','resultat');

% Modification de sa propriété String
set(h,'string',num2str(nCompteur));
 
% Enregistrement de la nouvelle valeur de nCompteur dans les données d'application de l'objet Figure
% contenant l'objet graphique dont l'action est exécutée (gcbf)
setappdata(gcbf,'valeur_de_nCompteur',nCompteur);

function ajouter(obj,event)
% Récupération directe de nCompteur depuis les données d'application de l'objet Figure
% contenant l'objet graphique dont l'action est exécutée (gcbf)
nCompteur=getappdata(gcbf,'valeur_de_nCompteur');

nCompteur=nCompteur+1;

% Récupération de l'identifiant de l'objet Uicontrol Text résultat enfant de l'objet Figure
% contenant l'objet graphique dont l'action est exécutée (gcbf)
h=findobj('parent',gcbf,'style','text','tag','resultat');

% Modification de sa propriété String
set(h,'string',num2str(nCompteur));
 
% Enregistrement de la nouvelle valeur de nCompteur dans les données d'application de l'objet Figure
setappdata(gcbf,'valeur_de_nCompteur',nCompteur);

 

La propriété UserData

Les fonctions set et get permettent de sauver ou de récupérer une valeur quelconque.

set(hObject, ‘UserData’, Valeur);

Valeur = get(hObject, ‘UserData’);

Correspond à la méthode de développement des versions de MATLAB inférieures à MATLAB 6.

 

function gui_userdata_findobj

% Création de l'objet Figure
figure('units','pixels',...
       'position',[250 250 500 500],...
       'color',[0.925 0.913 0.687],...
       'numbertitle','off',...
       'name','[GUI] Utilisation de USERDATA',...
       'menubar','none',...
       'tag','interface');
 
% Création de l'objet Uicontrol Pushbutton -
uicontrol('style','pushbutton',...
          'units','normalized',...
          'position',[0.1 0.1 0.1 0.05],...
          'string','-',...
          'callback',@retrancher,...
          'tag','bouton_retrancher');

% Création de l'objet Uicontrol Pushbutton +
uicontrol('style','pushbutton',...
          'units','normalized',...
          'position',[0.3 0.1 0.1 0.05],...
          'string','+',...
          'callback',@ajouter,...
          'tag','bouton_ajouter');

% Création de l'objet Uicontrol Text résultat
uicontrol('style','text',...
          'units','normalized',...
          'position',[0.1 0.2 0.3 0.05],...
          'string','0',...
          'tag','resultat');
  
% Initialisation de la valeur représentant la valeur courante du compteur nCompteur à 0
nCompteur=0;

% Enregistrement direct de nCompteur dans les données utilisateur de l'objet Figure
set(gcf,'UserData', nCompteur);

% Callbacks
function retrancher(obj,event)

% Récupération directe de nCompteur depuis les données utilisateur de l'objet Figure
% contenant l'objet graphique dont l'action est exécutée (gcbf)
nCompteur=get(gcbf,'UserData');

% Diminution de la valeur de nCompteur
nCompteur=nCompteur-1;

% Récupération de l'identifiant de l'objet Uicontrol Text résultat enfant de l'objet Figure
% contenant l'objet graphique dont l'action est exécutée (gcbf)
h=findobj('parent',gcbf,'style','text','tag','resultat');

% Modification de sa propriété String
set(h,'string',num2str(nCompteur));

% Enregistrement de la nouvelle valeur de nCompteur dans les données utilisateur de l'objet Figure
% contenant l'objet graphique dont l'action est exécutée (gcbf)
set(gcf,'UserData', nCompteur);

function ajouter(obj,event)

% Récupération directe de nCompteur depuis les données utilisateur de l'objet Figure
% contenant l'objet graphique dont l'action est exécutée (gcbf)
nCompteur=get(gcbf,'UserData');

nCompteur=nCompteur+1;

% Récupération de l'identifiant de l'objet Uicontrol Text résultat enfant de l'objet Figure
% contenant l'objet graphique dont l'action est exécutée (gcbf)
h=findobj('parent',gcbf,'style','text','tag','resultat');

% Modification de sa propriété String
set(h,'string',num2str(nCompteur));

% Enregistrement de la nouvelle valeur de nCompteur dans les données utilisateur de l'objet Figure
set(gcf,'UserData', nCompteur);

 

Nous vous proposons de travailler avec les deux premières méthodes.