guis matlab
Post on 17-Sep-2015
219 Views
Preview:
DESCRIPTION
TRANSCRIPT
Mmo contemporain
ESSI 1reAnne, AUTOMATIQUE, Outils pour lAutomatique: Cration dinterfaces graphiques avec MATLAB
Cration dInterfaces Graphiques Utilisateur (GUIs) avec MATLABM
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: arbreUn GUI se prsente comme une structure arborescente (ci-dessous) compose dobjets dinterface
Construire un GUI cest donc construire une telle structure.
Objets dinterface On utilise les objets suivantsdans la suite, ce nest pas une liste exhaustive:
figure, text, axes, line, edit, slider, button, checkbox, Proprits:
C
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 = onSi 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
P
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
Handlers: Identificateurs des objetsL
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 Fig1Outils daide : (propedit, et GUI Layout Tool)D
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
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 closePremier exemple simple
Cration et Gestion dObjets
En fait, il nest pas besoin de constituer un GUI pour crer des objetset spcifier des valeurs pour leurs proprits:
>> 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:
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
Exercice Illustration:
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
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)
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.
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
Duplication dobjets dinterface:
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.
Quelques proprits des objets dinterface
On numre un ensemble dentre elles qui sont utilises dans lexemple de la page suivante:
Tag: Text1, Edit2, Slider1, Axes1
String: LireFT+Step, ou Terminer, ou Boucle ferme
Callback: close(gcf) ou grid on,
ButtonDownFcnanimate start
WindowButtonDownFcn, WindowButtonMotionFcn
ForegroundColor, BackGroundColor, Color: [Rouge Vert Bleu]
Value: 1: Checkbox coche, 0: non coche
FontAngleitalic (text)
FontNameBrush Script
FontSize16
FontWeightbold
Max, Min50, et 1 (slider)
SliderStep[0.01 0.1] (slider)
Position[100 100 200 400] soit xBG, yBG, Lx, Ly
NameMon premier interface
Pointerarrow, ou fullcrosshair (figure)
CurrentPointCurrpt=get(gca,currrentpoint) ( x et y souris
NextPlotadd
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.
On lance par la commande: >> gui
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 jourCheckBox: callback
v=get(gcbo,'Value')
if v==1,
set(gcbo,'String','Boucle ferme')
else set(gcbo,'String','Boucle ouverte'),
end
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)])
grid onFonction pour la lecture de la position de la souris sur les axes des tracsfunction [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
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.
On peut voir avec lditeur dinterfaces guide le contenu des autres callbackset les proprits des objets de linterface :
Effacercla % efface laxe actif (zone blanche de trac)
Terminerclose(gcf) % ferme la figure couranteZones Editables Edit1, Edit2, Edit3:
les callbacks qui souhaitent utiliser leur contenu vont les lire, comme par exemplepour 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.
racine
Figure
Uicontrol Axes Uimenu
ImageLinePatchSurface TextLight
Text, Edit, Buttons, Sliders ,
Trac
Grid
Quit
Figure 1
Premier essai de cration dun GUI
Tag
PushButton2
String
Grid
Callback
grid
Tag
Button3
String
Quit
Callback
Close(gcf)
Tag
Button
String
Trac
Callback
t=0:.1:10;
plot(t,t.*sin(t))
Style
Text
String
Premier
Tag
Text1
Tag:
Axes1
Callback:
pas
Fonctions de linterface:
tracer la rponse indicielle dun processus donn sous la forme zros , ples, gain
mesurer les points de la rponse en pointant avec la souris,
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 - 9 -0
Page - 15 -
top related