GUIs Matlab

10
ESSI 1 ère Année, AUTOMATIQUE, Outils pour l’Automatique: Création d’interfaces graphiques avec MATLAB Création d’Interfaces Graphiques Utilisateur (GUIs) avec MATLAB M atlab permet à l’utilisateur de programmer des interfaces graphiques interactifs afin de présenter ses résultats. Le chapitre GUI Implementation de la notice Building GUIs with MATLAB est peu détaillé, les interfaces graphiques réalisables restent relativement simples. On précise 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 présente comme une structure arborescente (ci-dessous) composée d’objets d’interface Construire un GUI c’est donc construire une telle structure. Objets d’interface On utilise les objets suivants dans la suite, ce n’est pas une liste exhaustive: figure, text, axes, line, edit, slider, button, checkbox, … Propriétés : haque objet possède un ensemble de propriétés généralement programmables qui fixent l’apparence graphique et les réactions de l’objet aux sollicitations de l’utilisateur. C Les propriétés peuvent être des chaînes de caractères, des vecteurs de valeurs numériques, spécifiés selon le format courant : Par exemple, Xtick = [0 :0.2 :1] , ou Xgrid = ‘on’ Si chaque type d’objet possède des propriétés propres, certaines propriétés sont communes à Page - 9 - Figure Uicontrol Axes Uimenu Image Line Patch Surface Text Light Text, Edit, Buttons, Sliders , … racin

description

GUIs Matlab

Transcript of GUIs Matlab

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 -