Vous êtes sur la page 1sur 7

Cration dInterfaces Graphiques

Utilisateur (GUIs) avec MATLAB


M
atlab permet lutilisateur de programmer des interfaces graphiques
interactifs afin de prsenter ses rsultats. Le chapitre GUI
Implementation de la notice Building GUIs with MATLAB est peu
dtaill, les interfaces graphiques ralisables restent relativement simples.
On prcise donc les notions et les composants permettant de comprendre
le fonctionnement des GUIs de MATLAB et on illustre par un exemple.

Structure : arbre
Un GUI se prsente comme une structure arborescente (ci-dessous)
compose dobjets dinterface
racine
Figure

Uicontrol

Axes

Uimenu

Text, Edit, Buttons, Sliders ,

Image Line

Objets dinterface

On utilise les objets suivants dans la suite,


ce nest pas une liste exhaustive:

figure, text, axes, line, edit, slider, button, checkbox,

Proprits :

haque objet possde un ensemble de proprits gnralement


programmables qui fixent lapparence graphique et les ractions de
lobjet aux sollicitations de lutilisateur.
Les proprits peuvent tre des chanes de caractres, des vecteurs de
valeurs numriques, spcifis selon le format courant :
Par exemple, Xtick = [0 :0.2 :1], ou Xgrid = on
Si chaque type dobjet possde des proprits propres, certaines
proprits sont communes tous les objets : un objet text a un nom
(proprit Tag), une chane de caractres quil affiche (proprit String),
des couleurs Foregroundcolor et Backgroundcolor, avec une
police de caractres FontName de taille Fontsize Pour retrouver la
valeur dune proprit, il faudra en spcifier le nom dans une chane de
caractres. Lditeur dinterfaces guide ne teste pas les majuscules et les
trois premires lettres suffisent pour retrouver une proprit: on pourra
taper str pour la proprit String par exemple.

Callbacks : Ractivit de linterface


Patch Surface Text Light

Construire un GUI cest donc construire une telle structure.

armi les proprits des objets de linterface, les Callbacks


contiennent des scripts ou des fonctions MATLAB pour programmer
les ractions de linterface aux commandes de lutilisateur.
Ainsi, imaginons un PushButton nomm Bouton auquel on a associe
le Callback : grid on. Cliquer sur Bouton provoque le trac dune
grille sur les axes de trac courants. Le Callback close(gcf) fermerait
linterface graphique, cla effacerait les tracs, etc

Page

-9-

Handlers : Identificateurs des objets

es objets tant crs lors de la constitution de linterface, ou


dynamiquement durant lexcution, on leur associe lors de la
cration un identificateur unique, quon appelle le Handler et qui
permet de les manipuler. Certains handlers sont rservs et mis jour en
permanence :
gcf : attach la figure courante
gca : axes de trac courants
gcbf : figure active (dans laquelle on clique)
gcbo : objet activ actuellement laide de la souris
Pour retrouver dans un script le handler dun objet de linterface dont on
connat une proprit qui le caractrise, on peut utiliser la fonction
findobj :
h = findobj( gcf, Tag, Fig1) par exemple, h handler de Fig1

Les fonctions get et set associes aux handlers, permettent de


modifier par programme dans les callbacks les proprits des figures
et objets graphiques:
>> get(0)
% liste les proprits de root
>> h= plot(t,y) % retourne le handler h du plot
>> propedit(h)
>> delete(h)
%efface lobjet h, le trac
>> get(h)
>> set(h,Color,[0.5 0 0]) % ou color rouge sombre
>> set(gca,Xgrid,on,
XTick,[0 1 3 4 4.5 5])
>> close(gcf) % quivalent close

Premier exemple simple


Figure 1

Tag :
Axes1
Callback :
pas

Question poses
- Quelle est la diffrence entre : string, int, float
- Quelle est la diffrence entre get set
- Ecrire le programme qui permet de configurer un bouton
- Cest quoi un Callback
-Un handler permet : ......

Outils daide : (propedit, et GUI Layout Tool)

epuis la barre de menu de Matlab, ou depuis la ligne de commande,


on lance lditeur de proprits, soit propedit, ou mme lditeur
dinterfaces graphiques : guide.
>> propedit
% ou menu File de Matlab
>> guide
% ou menu File

Style
Text
String
Premier
Tag
Text1

Premier essai de cration dun GUI


Trac

Tag
Button
String
Trac
Callback
t=0 :.1 -:10
Page
10 ;plot(t,t.*sin(t))

Grid

Tag
PushButton2
String
Grid
Callback
grid

Quit

Tag
Button3
String
Quit
Callback
Close(gcf)

root
figure
(axes line), title xlabel ylabel
Lditeur de proprits propedit permet de parcourir les
arborescences, et de visualiser ou de modifier les proprits des
objets existants.
Lditeur dinterface guide permet de dfinir graphiquement les
objets dinterface et leurs proprits

Cration et Gestion dObjets

EXERCICE ILLUSTRATION :

En fait, il nest pas besoin de constituer un GUI pour crer des


objets et spcifier des valeurs pour leurs proprits:

Afin de mieux apprhender la cration et lutilisation des objets


dinterface, on ralisera les manipulations suivantes avec Matlab :
t=0 :.1 :100 ;
figure
axes
line(t,t.*sin(t))
close

>> h=text(x,y,Ceci est un objet)

cre un objet text et une fentre graphique, et retourne le handler h ;


>>set(h,FontSize,12,
Color, [1 0 0],
Font,arial)

en modifie les proprits graphiques. Pour effacer lobjet, il suffira


de faire:
>> delete(h)
De mme, sont licites les crations dobjets telles que :
>> h= plot(t,sin(t),t,cos(t),r*) ou
>> hl = line(t,sin(t),LineWidth,thick) ou encore
>> hf = figure(position,[100 100 400 200],
pointer,crosshair,
color,[1 0 0], ...
Name,Mon premier interface)
qui trace une figure dont le fond est rouge, le curseur devient une
croix +, le handler hf retourn vaut 1
>>delete(hf) ou delete(1) est quivalent close
>> ha= axes()
Pour crer un objet dinterface on peut utiliser la fonction uicontrol :
>>h=uicontrol(style,pushbutton,string,Terminer,
callback,close)
Excuter un plot cre une arborescence:

puis plot(t,t.*sin(t))
conclusion ? Linstruction plot cre une figure, un axe (zone de
trac), et une (ou des) lignes
h= plot( t, t.*sin(t), t, t)
Linstruction retourne maintenant deux handlers associes aux duex
lignes traces
get(h(1),color))
set(h(2),Tag,ligne 2,
color,[0.1,0.8,0.5],
ButtondownFcn,close)
Puis, cliquer sur la ligne h(2). La figure est ferme en raction.
Remarquer que les noms des proprits graphiques peuvent tre
crits en minuscules ou en majuscules, indiffremment) .
Enfin, reprendre les lignes prcdentes, et ajouter une troisime fois
h= plot( t, t.*sin(t), t, t)

Page

- 11 -

get(h(2),buttondownfcn)
donne une chane vide. Le nouveau dessin a cre deux nouvelles
lignes dans lesquelles les proprits ont t remises leur valeur
dfaut, en particulier ButtonDownFcn = , bien que le trac soit
identique.

Quelques proprits des objets dinterface


FICHIERS CE CRATION DUN INTERFACE :
Il faut noter quun interface MonGUI cr partir de lditeur
dinterfaces guide tient dans deux fichiers. Le script MonGUI.m
contient la description en langage Matlab de linterface, la premire
instruction xcutable en est dailleurs :
load MonGUI
Cette instruction Matlab permet de charger des donnes numriques
places dans un fichier de donnes (extension .mat dans Matlab) ici
MonGUI.mat.
MonGUI.m peut tre dit mais il est dconseill den modifier le
texte moins dtre un spcialiste averti.
edit MonGUI
et on lance lexcution de linterface en lanant le script MonGUI
>> MonGUI

On numre un ensemble dentre elles qui sont utilises dans


lexemple de la page suivante:
Tag :
Text1, Edit2, Slider1, Axes1
String :
Callback :

LireFT+Step, ou Terminer, ou Boucle


ferme
close(gcf) ou grid on,

ButtonDownFcn

animate start

WindowButtonDownFcn, WindowButtonMotionFcn
ForegroundColor, BackGroundColor, Color: [Rouge Vert Bleu]
Value :

1 : Checkbox coche, 0 : non coche

FontAngle

italic

DUPLICATION DOBJETS DINTERFACE :

FontName

Brush Script

Dupliquer un objet graphique avec lditeur guide (slection et


bouton droit) cre un second objet de mme nom jusqu la
modification de la proprit Tag de lobjet nouveau n. Ne pas
modifier le nom Tag posera un problme si lon souhaite lire ou
modifier les proprits de lobjet dans le fonctionnement ultrieur de
linterface. Typiquement, on modifie un objet en croyant modifier un
autre. Prendre des prcautions.
Dailleurs lireFichier et lireFichier sont des noms diffrents bien
sr pour des objets.

FontSize

16

FontWeight

bold

Max, Min

50, et 1 (slider)

SliderStep

[0.01 0.1] (slider)

Position

[100 100 200 400] soit xBG, yBG, Lx, Ly

Page

- 12 -

(text)

Name

Mon premier interface

Pointer

arrow, ou fullcrosshair (figure)

CurrentPoint

Currpt=get(gca,currrentpoint) x et y souris

NextPlot

add

Cration dun GUI plus labor :


On explicite lexemple dinterface ci-contre, cre
laide du script gui dans gui.m. Ce script utilise la
fonction animator de animator.m). En fait, trois fichiers
sont ncessaires: gui.m, gui.mat, animator.m
dans le rpertoire Matlab de la machine euler.essi.fr
(157.169.10.172), utilisateur et mot de passe matlab.
On a utilis lditeur dinterfaces : >> guide,
pour dfinir et placer les lments de linterface et
pour en ajuster les proprits.
Fonctions de linterface :
On lance par la commande : >> gui
(1) tracer la rponse indicielle dun processus
donn sous la forme zros , ples, gain
(2) mesurer les points de la rponse en pointant
avec la souris,
(3) prvoir la rponse du systme boucl
retour unitaire et avec un gain unit.
On utilise 5 objets text, 3 zones edit, un slider, 4
buttons, un axes, une checkbox.
De plus,
Cliquer sur la fentre provoque le trac
Les listes de zros et de ples sont entres dans
des zones de texte ditables
Le gain est spcifi laide dun scrollbar
Le curseur devient une croix, crosshair
La position de la souris est symbolise par un
point, et apparat dans une fentre texte
On superpose les tracs (Nextplot= add)
Un bouton permet deffacer les tracs, un
autre ajoute une grille, un troisime ferme
linterface et termine.

Page

- 13 -

end

Callbacks et fonctions utiliss dans linterface


Cliquer sur le bouton LireFT+Step provoque lexcution du callback
suivant crit sous la forme dun script MATLAB, ou simplement de
lappel une fonction accessible dans le path (voir ici lappel la
fonction animator un peu plus loin).
LireFT + Step : est donc un pushbutton dans voici le callback

h=findobj(gcbf,'Tag','Edit1');
a=str2num(get(h,'String'));
h=findobj(gcbf,'Tag','Edit2');
b=str2num(get(h,'String'));
h=findobj(gcbf,'Tag','Edit3');
g=str2num(get(h,'String'));
proc=zpk(a,b,g);
if get(findobj(gcf,'Tag','Checkbox1'), 'Value'),
[y,t] = step(proc/(1+proc));
else,
[y,t]=step(proc);
end
plot(t,y) ;
axis([0 t(length(t)) min(y) max(y)])
grid on
Cliquer dans la zone du checkbox renvoie 0 ou 1 dans la
variable v ; selon le cas, le texte associ est modifi et mis jour
CheckBox : callback

v=get(gcbo,'Value')
if v==1,
set(gcbo,'String','Boucle ferme')
else set(gcbo,'String','Boucle ouverte'),

La position du curseur du slider (chelle) est place dans v, puis


affiche dans la zone de texte de nom Edit3. Cest le gain dsir, que
lon peut galement taper dans la zone ditable Edit3.
Slider : callback

v=get(gcbo,'value');
h=findobj('tag','Edit3');
set(h,'string',num2str(v))
Il faudrait ajouter le couplage inverse Edit3 Slider
Deux callbacks sont dfinis ici selon les actions de lutilisateur sur la
Figure, fentre principale de trac. Appuyer sur un bouton de la
souris dmarre la fonction animator qui affiche la position de la
souris sur les tracs pour faciliter les mesures.
Figure : (la figure englobe lensemble de linterface)

Buttondownfcn
animator start (quivalent la syntaxe animator(start)
WindowButtonDownFcn
h=findobj(gcbf,'Tag','Edit1');
a=str2num(get(h,'String'));
h=findobj(gcbf,'Tag','Edit2');
b=str2num(get(h,'String'));
h=findobj(gcbf,'Tag','Edit3');
g=str2num(get(h,'String'));
proc=zpk(a,b,g);
if get(findobj(gcf,'Tag','Checkbox1'), 'Value'),
[y,t] = step(proc/(1+proc));
else,
[y,t]=step(proc);
end
line(t,y); (noter la diffrence avec plot(t,y) qui recre lobjet Axes1)
axis([0 t(length(t)) min(y) max(y)])

Page

- 14 -

grid on
Fonction pour la lecture de la position de la souris sur les axes des tracs
function [x,y]=animator(action)
switch(action)
case 'start',
set(gcbf,'WindowButtonMotionFcn', ...
'animator move;')
set(gcbf,'WindowButtonUpFcn', ...
'animator stop')
case 'move'
if ~isempty(findobj(gca,'Tag','toto')),
delete(findobj(gca,'Tag','toto'))
end
currpt=get(gca,'CurrentPoint');
h=findobj(gcbf,'Tag','Text1');
set(h,'string',['t= ', ...
num2str(currpt(1,1))...
,' y= ',num2str(currpt(1,2))])
x=currpt(1,1);
y=currpt(1,2);
text(x,y,'\bullet','Tag','toto');
case 'stop'
set(gcbf,'WindowButtonMotionFcn','')
set(gcbf,'WindowButtonUpFcn','')
end

On peut voir avec lditeur dinterfaces guide le contenu des autres


callbacks et les proprits des objets de linterface :
Effacer
cla % efface laxe actif (zone blanche de trac)
Terminer
close(gcf) % ferme la figure courante
Zones Editables Edit1, Edit2, Edit3 :
les callbacks qui souhaitent utiliser leur contenu vont les lire, comme par
exemple pour lire la liste des zros de la fonction de transfert:
h =findobj(gcbf,'Tag','Edit1');
a = str2num(get(h,'String'));
Axes pour recevoir les tracs : pas de callback ici
labels StaticText3, StaticText2
pour y afficher des textes permanents ou temporaires, on utilise la
proprit String
Pour afficher des coordonnes de la souris dans la zone texte Text1, on
utilise de mme la proprit String, voir la fonction animator ci-contre.

Cette fonction est un bloc switch .. case que lon appelle avec un
argument avec les trois possibilits start, move et stop.
start modifie la ractivit de linterface, en modifiant deux callbacks de
la figure de faon appeler animator(move) quand on dplace la souris
bouton enfonc et animator(stop) quand on relche le bouton.
stop remet la ractivit de linterface dans son tat initial
move mesure la position du curseur sur laxe, proprit CurrentPoint
dans le vecteur currpt, et laffiche sur lobjet texte Text1. On symbolise
galement cette position par une bulle objet toto.

Page

- 15 -

Vous aimerez peut-être aussi