On se propose de faire une interface graphique qui permettra d’afficher, à l’aide d’un bouton, une couleur aléatoire sur un axe.

Pour cela, l’IHM devra contenir :

  • un objet Figure: qui sera la fenêtre principale de l’IHM
  • un objet Axes : pour l’affichage de la couleur
  • un objet Uicontrol de type Pushbutton : pour générer la couleur

Dans la figure ci dessous, vous avez une illustration du résultat attendu:

 

Générateur de couleur
Générateur de couleur

 

Lorsque l’utilisateur clique sur l’objet Pushbutton, l’objet Axes change de couleur de façon aléatoire.

 

Organisation du fichier

Le code de l’interface graphique et des callbacks tient sur un seul fichier M.

Le fichier doit être organiser comme suit :

  1. Entête : contient le prototype du fichier M et le commentaire qui sera affiché par la commande « help »;
  2. Gestion des entrées : ici vous allez initialiser vos variables;
  3. Construction des composants: vous allez commencer par créer la figure, ensuite les composants.
  4. Initialisation des composants : vous pouvez modifier les propriétés des composants ou de la figure dans cette partie;
  5. Callbacks des composants: c’est ici que vous aller définir les callbacks pour chaque évenement généré par l’interface graphique.

 

Entête du fichier

Le code de l’interface graphique est écrit dans un seul fichier mpt_gencouleur.m. Ce fichier contient à la fois la gestion des objets et de leurs actions.

Dans l’entête nous allons expliquer l’objectif de l’interface. ce commentaire sera accessible à partir de la fenêtre de commande de MATLAB avec la commande « help mpt_gencouleur ».

function mpt_gencouleur
%----------------------------
% Propriété de MatlabPourTous
% MPT_GENCOULEUR est un exemple d'une interface graphique qui permet de générer aléatoirement des couleurs
% Compatible : MATLAB2013b
%----------------------------

 

Création de la figure

Utiliser la fonction figure et ses paramètres pour créer la figure:

% Création de l'objet Figure
fig = figure('units', 'pixels', ...
    'position', [520 380 300 250], ...
    'Visble, 'On', ...
    'name', 'Générateur de couleur aléatoire');

Le handle de la figure sera stocker dans la variable fig.

Vous pouvez construire la figure invisible (Visible = Off), la rendre visible au dernier moment.

‘position’, [520 380 300 250], … : signifie que le coin gauche et bas de la figure sera à 520x380pixels du coin gauche et bas de l’écran. La figure aura une hauteur de 250pixels et une largeur de 300pixels.

 

Création des composants

Après la création de la figure principale, il faut maintenant créer les composants.

Ci dessous la liste des composants disponibles :

Composant Fonction
Axes axes
Groupe de boutons uibuttongroup
Case à cocher uicontrol (style = checkbox)
Texte éditable uicontrol (style = edit)
Liste uicontrol (style = listbox)
Panel uipanel
Liste déroulante uicontrol (style = popupmenu)
Bouton poussoir uicontrol (style = pushbutton)
Bouton radio uicontrol (style = radiobutton)
Barre de défilement uicontrol (style = slider)
Texte statique uicontrol (style = text)
Bouton d’état uicontrol (style = togglebutton)
Menu uimenu

 

On crée le bouton «Générer une couleur» :

% Création du bouton "Générer une couleur"
uicontrol('style', 'pushbutton', ...
    'units', 'pixels', ...
    'position',[75 15 150 20], ...
    'String', 'Générer une couleur', ...
    'callback', @mpt_genC);

 

Création de l’axe qui va changer de couleur:

% Création de l'objet Axes qui permettra d'afficher la couleur
axes('units', 'pixels', ...
    'position', [25 70 250 150], ...
    'tag','axes1');

 

Associer les callbacks

On crée la fonction callback appelée par l’action sur le bouton « Générer une couleur » :

function mpt_genC(obj,event)
% Fonction associée au Callback de l'objet Pushbutton
% obj : identifiant de l'objet Pushbutton
% event : événement liés à l'objet Pushbutton
% Récupération des identifiants utiles
fig = get(obj,'parent');
handles = guidata(fig);
 
% Modification de la couleur de l'objet Axes
set(handles.axes1, 'color', rand(1,3));

 

La référence à un callback peut se faire de 2 façons :

  • Avec une chaîne évaluable
h = uicontrol(fig,'Style','pushbutton','String','Générer une couleur','Callback',{'MonCallback',p1,...});

La création de la fonction se fait ainsi :

function MonCallback(p1,...)

 

  • Avec une référence de fonction
h = uicontrol(fig,'Style','pushbutton','String','Générer une couleur','Callback',{@MonCallback,p1,...});

MATLAB passe également deux autres paramètres supplémentaires à la fonction:

function MonCallback(hObject,eventdata,p1,...)

 

Gestion des données

Dans cet exemple, nous avons opter pour l’utilisation de la fonction guidata pour la gestion des données.

Stockage des identifiants des objets dans la structure « handles »:

% Stockage des identifiants utiles dans la structure "handles"
handles = guihandles(fig);
guidata(fig,handles)

Je vous conseile le tutoriel sur la gestion des données dans une interface graphique.

 

uiwait/uiresume

Ces commande peuvent vous servir pour attendre une action de l’utilisateur pour renvoyer des sorties.

  • uiwait bloque l’exécution jusqu’à ce que la fonction uiresume soit appelée ou que la figure soit détruite;
  • Après le uiwait, formaliser les sorties.