Vous êtes sur la page 1sur 7

Introduction Matlab - Complments GUI

Cration d'une interface graphique


Une interface graphique permet de contrler une application interactivement avec la souris , plutt que par lancement des commandes au clavier. Une interface graphique comprend des menus, des boutons, des "ascenseurs", des cases cocher, des listes de choix, des zones de texte. Exemple d'interface

Elle permet de "cliquer" directement sur des images, des graphiques ou des ob!ets pour modifier la valeur d'une variable , dclencher des fonctions ou simplement faire appara"tre des informations lors d'un survol la souris. #atlab permet d'$crire assez simplement une interface graphique pour faire une application interactive utilisable par des utilisateurs non form$s #atlab. %es notions principales d'une interface graphique sont & les divers ob!ets graphiques, auxquels sont attribu$s des noms s'mboliques( ces "poign$es de main" ou "handles" permettent de les rep$rer dans l'interface( pour envisager par exemple une modification d'namique )gris$ d'un bouton provisoirement non utilisable, changement du texte d'un bouton, modification d'une liste de choix...* & les proprits des ob!ets )couleur, disposition, taille, variable associ$e* & les fonctions ex$cut$es par les clic souris sur les $l$ments ou " callbacks" )d$crites en ligne de commande #atlab *. %es versions actuelles de #atlab permettent de construire ces interfaces directement avec la souris gr+ce au ,U-.E ),raphical User -nterface .evelopment Environment*. /et outil est capable de construire des applications de tr0s haut niveau. /ependant, son approche est tr0s d$licate pour un utilisateur peu exp$riment$. %'approche classique par description textuelle de l'interface, moins performante mais compr$hensible, permet de se familiariser avec les principales notions. /e pol'copi$ permet de faire une approche progressive du ,U-( les exemples sont op$rationnels et sont tester pour se familiariser.

Pierre Bonnet - USTL

Introduction Matlab - Complments GUI

I - Elements de base de l'interface graphique


1our cr$er une interface, il faut disposer d'une fen2tre de base dans laquelle seront ins$r$s les $l$ments graphiques )ob!ets*. 3 noter que tout dessin graphique ou affichage d'image )r$sultat de plot, mesh, imshow* peut servir de fen2tre de base. Cration d'une nouvelle fentre pour application:
fig1 = figure

%e param0tre fig1 est le handle de la fen2tre, c'est dire le num$ro de rep0re de la fen2tre attribu$ par #atlab sa cr$ation. -l est possible d'appliquer des fonctions sur cette fen2tre )redimensionnement, a!out de menus, boutons, ...* en pr$cisant dans les fonctions le handle auquel elle s'applique. %a fen2tre active un instant donn$ a pour handle implicite gcf . .e fa4on g$n$rale, tout ob!et graphique se voit attribu$ un handle( ce handle sert de r$f$rence cet ob!et dans l'application. Proprits d'une fentre graphique (ou d'un ob et!
get(fig1)

%es principales propri$t$s sont le titre, la position et la dimension dans l'$cran, la couleur de fond, la pr$sence et le t'pe de menus, le redimensionnement... 5oute propri$t$ particuli0re est obtenu par
valeur propri!t! = get( fig1, "nom propri!t!" )

5oute propri$t$ )modifiable6* peut 2tre modifi$e en d$finissant une nouvelle valeur pour la propri$t$ consid$r$e )valeur num$rique, cha"ne, liste de valeur, tableau...*
set(fig1, "nom propri!t!" , valeur propri!t! )

Ex set( fig1 , "#ame" , "$emo %U&" , "#um'erTitle" , "off" )( %a fen2tre de base est l'$cran qui a pour handle "7". 1ar get () , "ScreenSi*e" ), on obtient la taille de l'$cran ph'sique de l'$cran. /es valeurs permettent de fixer la taille d'une fen2tre en rapport avec la dimension ph'sique de l'$cran et d'$viter de cr$er une application qui "d$borde" de l'$cran6 %a taille et la position de la fen2tre )ou d'un ob!et* se fixent par modification de sa propri$t$ ou contrle "position", comprenant les coordonn$es )8or,9or* du coin inf$rieur gauche et ses dimensions )8fen,9fen*
set( fig1 , "position" , + 1) , 1) , ,77

, :77 ;*

%'ensemble des propri$t$s modifiables d'un ob!et est donn$ par set(han-le o'.et) . %a liste s'affiche avec les valeurs possibles pour les diff$rentes propri$t$s( les valeurs par d$faut sont signal$es par des crochets < = . Exemple
set( fig1 )

5out ob!et graphique cr$$ pourra 2tre supprim$ par


-elete (han-le o'.et)

%a suppression d'un ob!et entra"ne la suppression des ob!ets qui lui sont li$s )ob!ets fils*.

Pierre Bonnet - USTL

Introduction Matlab - Complments GUI

Insertion d'un Objet dans la fentre %'insertion d'un ob!et dans une fen2tre se fait par la fonction "uicontrol" , dont le premier param0tre est le handle de la figure de r$f$rence. %e deuxi0me param0tre pr$cise le "st'le" ou t'pe d'ob!et ins$rer. Exemple le "texte fixe" est l'ob!et le plus simple( il permet de placer un texte dans la fen2tre. te/t1 = uicontrol( fig1 , "st0le" , "te/t" , "position" , +1)),11),12),,)3 ,444
"string" , "Bon.our" , "fontsi*e" , 11 )

5outes les propri$t$s de cet ob!et peuvent 2tre modifi$es par la commande "set" . 1ar exemple, le texte en lui&m2me )'string"* $tant une propri$t$, il peut 2tre modifi$
set( te/t1 , "string" , "5u revoir" )(

3utre exemple insertion d'un bouton&radio


ra-io1 = uicontrol( fig1 , "st0le" , "ra-io" , "String" , "6ption1" , "Position" , +,),,),7),,)3 )

3 la diff$rence du "texte" , on remarque que cet ob!et est "cliquable" la souris, avec modification de son aspect )cet fonction est prise en charge sans aucune programmation par l'utilisateur*.

II - Principe de l'interaction avec la souris


%a presque totalit$ des ob!ets de l'interface graphique )curseur, case cocher...* peut interagir avec la souris. %a fonctionnalit$ la plus courante est la modification de la valeur associ$e l'ob!et )si elle existe* pour les ob!ets destin$s faire une saisie )case cocher, curseur, champ de saisie, choix de liste...*, #atlab g0re automatiquement la valeur associ$e. /ette valeur est r$cup$rable par toute partie de l'application par la fonction "get"
valeur = get (han-le o'.et , "value")(

/ette fonctionnalit$ permet de saisir la valeur d'une variable par l'interface graphique plutt que par le clavier. %a deuxi0me interaction courante est une action d$clench$e par le "clic" souris sur l'ob!et )appu'$ puis rel+ch$* la fonction associ$e est d$crite dans la propri$t$ "callback" de l'ob!et. /ette fonction peut 2tre une instruction de base #atlab ou une fonction d$finie par l'utilisateur )stoc>$e en fichier .m*
Pierre Bonnet - USTL

Introduction Matlab - Complments GUI set( ra-io1 , "call'ac8" , "get( ra-io1 , " "value" " ) " )(

?emarquer que la fonction est d$crite en cha"ne de caract0res avec des " ' " en d$but et fin, ce qui oblige doubler les " ' " pour ceux qui sont inclus dans la cha"ne principale. /ette description en cha"ne permet de d$finir en callbac> une liste d'instruction, ce qui $vite d'$crire une multitude de petites fonctions externes d$di$es aux callbac>s. /ertains ob!ets n'ont pas de callbac> )cas des figures* mais poss0dent d'autres actions associ$es la souris. %eur emploi est identique au callbac> classique )description de la fonction en liste d'instructions*. %es principales sont
9in-owButtonUp:cn 9in-owButton$own:cn 9in-owButton;otion:cn

Exemple r$cup$ration des coordonn$es en pixels de la souris au clic


fig1 = figure ( set( fig1 , "9in-owButton$own:cn" , "get( fig1 , " "<urrentPoint " " ) " )(

@i on d$sire obtenir des coordonn$es dans l'espace de mesure des axes d'un graphique, plutt qu'en pixels de la figure, il faut faire r$f$rence aux axes ) gca * dans la fonction de clic
plot( =) , =) , " r> " ) ? trac! -"une croi/ rouge au centre set( gcf , "9in-owButton$own:cn" , "get( gca , " "<urrentPoint" " ) " )

/ertains ob!ets poss0dent une fonction callbac> et une fonction associ$e au clic souris )par exemple Button$own:cn *

III - Principau" #b ets $raphiques %outon poussoir


Un bouton poussoir se cr$e par
'p1= uicontrol ( fig1 , "st0le" , "push" , "position" , +1) 1)) 7) ,) 3 ,444 "string" , "$!'ut" , "call'ac8" , "plot(T,@)" )

%orsqu'on clique sur le bouton poussoir, il provoque l'ex$cution de la fonction indiqu$e dans le 'callbac>'. /ette fonction peut 2tre une instruction de base #atlab ou une liste d'instruction, ce qui $vite d'$crire une multitude de petites fonctions ex$cut$es pat les callbac>s. Un bouton&poussoir s'inactive par la commande
set('p1 , "ena'le" , "off" )

1ar cette commande, on peut rendre inactif certaines commandes, par exemple lorsqu'il manque des informations pour traiter un probl0me.

Pierre Bonnet - USTL

Introduction Matlab - Complments GUI

&enus
,$n$ralement, les menus de la fen2tre d'application ne sont pas les menus standard )voir vue ci&dessus mais des menus sp$cifiques. Un menu est un titre compl$t$ par une liste de sous&menu. %es actions )callbac>s*sont g$n$ralement lanc$s partir des sous&menus. %'a!out de menus sp$cifique se fait par
menu1 = uimenu( fig1 , "la'el" , " Statist4" )(

Un sous&menu est un $l$ment du menu principal, donc de l'entit$ p0re. -l est donc d$clar$ car menu du menu principal.
smenu1 = uimenu( menu1 , "la'el" , "#ormale" , "call'ac8" , "metho-e normale" ) smenu= = uimenu( menu1 , "la'el" , "Binomiale" , "call'ac8" , "metho-e 'inomiale" )(

1our enlever les menus standards de la fen2tre, il faut fixer la propri$t$ "#enubar" la valeur par d$faut menubar
set(fig1,"menu'ar",menu'ar)(

'scenseur ou slider
%'ascenseur a pour ob!ectif de fixer la valeur d'un param0tre entre deux bornes fix$es. %a valeur prise par la variable est repr$sent$e par la position du curseur .
sli-1=uicontrol(fig1,"st0le","sli-er","position", +1)),1),11),=)3 , ";in" , -1 , ";a/" , 1 , 444 "call'ac8" , "val varia'le = get(sli-1 , ""value"" )" )(

%es textes )variable affect$e, valeurs..* ne sont pas d$finis par le slider. -l faut le compl$ter par des $l$ments textes convenablement plac$s et param$tr$s( leur valeur est modifier par le callbac> du slider. Exemple d'ascenseur avec affichage de la valeur
fig1=figure( te/te1=uicontrol(fig1,"St0le","te/t","String",),"Position", +1A),2),B),=)3,"Bac8%roun-color","w")( sli-1=uicontrol(fig1,"st0le","sli-er","position", +1)),1),11),=)3 , ";in" , -1 , ";a/" , 1 , 444 "call'ac8" , "set(te/te1,""String"", get(sli-1 , ""value"" ))" )(

Pierre Bonnet - USTL

Introduction Matlab - Complments GUI

(e"te Editable
1ermet l'utilisateur de saisir une valeur. /'est une fonction importante.
Te/t1 = uicontrol ( fig1 , "st0le" , " e-it" , "position", +1)),1),11),=)3 , ";a/" , 1 , "string" , ")" )(

,$n$ralement, -l faut associer un texte fixe pour pr$ciser le rle de la fen2tre de saisie l'utilisateur. Exemple le texte est plac$ gauche de la fen2tre de saisie
uicontrol ( fig1 , "st0le" , " te/te" , "position", +1),1),C),=)3 , "string" , "Daleur 5" )(

)iste de choi"
%a liste de choix ou pop&up menu permet de s$lectionner une valeur parmi une liste. ,$n$ralement, cette valeur est un texte . %a valeur retourn$e lors du choix )param0tre 'Aalue'* est le num$ro de ligne du choix.
choi/1 = uicontrol ( gcf , "St0le" , "popup" , "String" , "PierreEPaulEFacGues" , "Position" , +1) 1) 1)) B)3 )(

%a liste des texte est modifiable apr0s la cr$ation de la fen2tre de choix, en modifiant la propri$t$ '@tring' .

%outon *adio
%e bouton ?adio permet de fixer un param0tre binaire ) 7 ou B *, repr$sentant souvent un choix ou une option dans une application.
fig1 = figure ( ra-io1 = uicontrol( fig1 , "st0le" , "Ha-io" , "Position" , + ,) =) 1,) =1 3 , "String" , " 6ption5 " )( ra-io= = uicontrol( fig1 , "st0le" , "Ha-io" , "Position" , + ,) A1 1,) =1 3 , "String" , " 6ptionB " )( uicontrol( fig1 , "st0le" , "Te/t" , "Position" , + ,) 2) 1,) ,) 3 , "String" , 444 " <hoi/ -es 6ptions " , ":ont9eight", "'ol-" )(

Pierre Bonnet - USTL

Introduction Matlab - Complments GUI

?emarquer que les choix ne sont pas exclusifs )chaque choix peut 2tre s$lectionner*. 1our obtenir l'exclusion mutuelle, il faut agir sur les valeurs de choix par les callbac>s.
set( 'ra-io1 , " Dalue" , 1 )( set( ra-io1 , "call'ac8" , "set( ra-io= , " " Dalue" " , ) ) " ) ( set( ra-io= , "call'ac8" , "set( ra-io1 , " " Dalue" " , ) ) " ) (

Cadre
%e cadre permet de dessiner un rectangle de pr$sentation )par exemple regroupement de diverses entit$s graphiques dans un rectangle*. %e cadre se d$clare par
ca-re1 = uicontrol ( fig1 , "st0le" , "frame" , "position" , + pos@ ,posI,taille@,tailleI3)

$raphiques
%es graphiques se dessinent dans une partie de la fen2tre d$finie par la fonction 'subplot', dont les param0tres sont diff$rents de l'emploi classique )division de la fen2tre en sous&fen2tres de taille $gale* subplot) '1osition' , C 8pos 9pos 8taille 9taille;* %es param0tres se d$finissent en D de la fen2tre )redimensionnement automatique des zones graphiques avec le redimensionnement de la fen2tre*. -l est possible d'ouvrir plusieurs zones graphiques dans une m2me fen2tre. %es zones ne doivent pas se chevaucher, sous peine d'effacement de la zone situ$e sous la nouvelle zone.
fig1 = figure ( *1 = su'plot ( "Position" , + 4)1 41 4A 4A 3 ) ( plot ( sin( )J 1))) *= = su'plot ( "Position" , + 411 41 4A 4A 3 ) ( plot ( e/p( ) J 1)))

Pierre Bonnet - USTL

Vous aimerez peut-être aussi