IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

FAQ MATLAB

FAQ MATLABConsultez toutes les FAQ

Nombre d'auteurs : 11, nombre de questions : 172, dernière mise à jour : 29 septembre 2022 

 
OuvrirSommaireInterfaces graphiques (GUI)

Le handle est un identifiant qui permet de désigner un objet de manière unique. Il se présente sous la forme d'une valeur numérique.
Il permet l'accès à ses propriétés en lecture et écriture avec les fonctions getDocumentation de la fonction get et setDocumentation de la fonction set :

 
Sélectionnez
valeur = get(handleObjet,'propriété');
set(handleObjet, 'propriété', nouvelle_valeur)

Les syntaxes du genre :

 
Sélectionnez
valeur = handleObjet.propriete;
handleObjet.propriete = nouvelle_valeur;

sont à proscrire. On utilise exclusivement les fonctions get et set.

Il peut être obtenu de diverses façons :

  • Avec les fonctions de MATLAB

     
    Sélectionnez
    gca	% handle de l'objet Axes courant
    gcf	% handle de l'objet Figure courant
    gcbf	% handle de l'objet Figure où se trouve l'objet graphique dont le callback est en cours d'exécution
    gcbo	% handle de l'objet graphique dont le callback est en cours d'exécution
    gco	% handle de l'objet graphique courant
  • Avec la fonction qui crée l'objet

     
    Sélectionnez
    handleFigure = figure;      % Pour un objet Figure
    handleEdit = uicontrol('Style','Edit') % Pour un objet Uicontrol Edit
    handleAxes = axes           % Pour un objet Axes
    handleImage = image(im)     % Pour un objet Image
    handleLine = plot(x,y,'r')  % Pour un objet Line
    % …
  • Avec la fonction guihandlesDocumentation de la fonction guihandles qui retourne dans une structure le handle de tous les objets enfants d'un objet Figure ayant leur propriété 'Tag' définie (pour les utilisateurs de GUIDE, c'est cette fonction qui est appelée implicitement au début pour créer la superstructure handles) :

     
    Sélectionnez
    handleFigure = figure(...
        'menubar','none',...
        'Tag','myFigure' );
    handleUipanel = uipanel(handleFigure,...
        'Tag', 'myUipanel' );
    axes('Parent', handleUipanel,...
        'Tag', 'myAxes' );
    
    >> guihandles(handleFigure)
    
    ans = 
    
         myFigure: 1
        myUipanel: 0.0046
           myAxes: 1.0042
  • Avec les fonctions findobjDocumentation de la fonction findobj / findallDocumentation de la fonction findall : on renseigne le parent et/ou les valeurs des propriétés des objets que l'on cherche. La propriété 'Tag' peut se révéler très utile dans ce cas d'utilisation.

     
    Sélectionnez
    findall(handleParent, 'propriété_1','Valeur_1', …) 
    findobj(handleParent, 'propriété_1','Valeur_1', …)
    • findobj ne retourne que les objets dont la propriété 'HandleVisibility' est à 'on' (même si on effectue une recherche selon ce critère), mais possède une large possibilité de syntaxes (regexp, opérations logiques, profondeur).
    • findall retourne tous les objets recherchés indifféremment de la valeur prise par leur propriété 'HandleVisibility'.

On pourra vérifier la validité du handle (objet non encore détruit par exemple) à l'aide de la fonction ishandleDocumentation de la fonction ishandle.

Mis à jour le 2 décembre 2012  par Winjerome

Une fonction callback est une fonction que l'on associe à un composant d'une interface graphique (objet Figure, objet Uicontrol Text, Edit, Lisbox…). Elle définit la réponse à une action de l'utilisateur sur ce composant (clic sur un bouton, appui sur une touche du clavier, sélection d'un élément de menu…).

Cette association se fait par le biais de certaines propriétés des objets décrites dans le tableau suivant :

Propriétés Objets associés Description
ButtonDownFcn AxesPropriété ButtonDownFcn de l'objet Axes, FigurePropriété ButtonDownFcn de l'objet Figure, UibuttongroupPropriété ButtonDownFcn de l'objet Uibuttongroup, UicontrolPropriété ButtonDownFcn de l'objet Uicontrol, UipanelPropriété ButtonDownFcn de l'objet Uipanel Exécutée lors du clic de la souris sur l'objet.
Callback UicontextmenuPropriété Callback de l'objet Uicontextmenu, UicontrolPropriété Callback de l'objet Uicontrol, UimenuPropriété Callback de l'objet Uimenu, Exécutée lors de l'action "courante" effectuée sur l'objet (appui sur un bouton, sélection d'un menu…).
CellEditCallback UitablePropriété CellEditCallback de l'objet Uitable Exécutée lors du changement du contenu d'une cellule.
CellSelectionCallback UitablePropriété CellSelectionCallback de l'objet Uitable Exécutée lors de la sélection d'une cellule.
ClickedCallback UipushtoolPropriété ClickedCallback de l'objet Uipushtool, UitoggletoolPropriété ClickedCallback de l'objet Uitoggletool Exécutée lors d'un clic sur l'objet.
CloseRequestFcn FigurePropriété CloseRequestFcn de l'objet Figure Exécutée à la fermeture de l'objet Figure (croix rouge ou utilisation de la fonction closeDocumentation de la fonction close). Elle permet d'introduire la confirmation de la fermeture.
CreateFcn AxesPropriété CreateFcn de l'objet Axes, FigurePropriété CreateFcn de l'objet Figure, UibuttongroupPropriété CreateFcn de l'objet Uibuttongroup, UicontextmenuPropriété CreateFcn de l'objet Uicontextmenu, UicontrolPropriété CreateFcn de l'objet Uicontrol, UimenuPropriété CreateFcn de l'objet Uimenu, UipanelPropriété CreateFcn de l'objet Uipanel, UipushtoolPropriété CreateFcn de l'objet Uipushtool, UitoggletoolPropriété CreateFcn de l'objet Uitoggletool, UitoolbarPropriété CreateFcn de l'objet Uitoolbar Exécutée après la création de l'objet et avant son affichage, elle permet son initialisation.
DeleteFcn AxesPropriété DeleteFcn de l'objet Axes, UibuttongroupPropriété DeleteFcn de l'objet Uibuttongroup, UicontextmenuPropriété DeleteFcn de l'objet Uicontextmenu, FigurePropriété DeleteFcn de l'objet Figure, UimenuPropriété DeleteFcn de l'objet Uimenu, UipanelPropriété DeleteFcn de l'objet Uipanel, UipushtoolPropriété DeleteFcn de l'objet Uipushtool, UitoggletoolPropriété DeleteFcn de l'objet Uitoggletool, UitoolbarPropriété DeleteFcn de l'objet Uitoolbar, UicontrolPropriété DeleteFcn de l'objet Uicontrol Exécutée juste avant la destruction de l'objet.
KeyPressFcn FigurePropriété KeyPressFcn de l'objet Figure, UicontrolPropriété KeyPressFcn de l'objet Uicontrol Exécutée lors de l'appui sur une touche du clavier.
KeyReleaseFcn FigurePropriété KeyReleaseFcn de l'objet Figure, UicontrolPropriété KeyReleaseFcn de l'objet Uicontrol Exécutée lors du relâchement d'une touche du clavier.
OffCallback UitoggletoolPropriété OffCallback de l'objet Uitoggletool Exécutée lorsque l'état du bouton est mis à 'off'.
OnCallback UitoggletoolPropriété OnCallback de l'objet Uitoggletool Exécutée lorsque l'état du bouton est mis à 'on'.
ResizeFcn FigurePropriété ResizeFcn de l'objet Figure, UibuttongroupPropriété ResizeFcn de l'objet Uibuttongroup, UipanelPropriété ResizeFcn de l'objet Uipanel Exécutée lorsque l'objet est redimensionné.
SelectionChangedFcn UibuttongroupPropriété SelectionChangedFcn de l'objet Uibuttongroup (SelectionChangeFcn avant R2014b) Exécutée lorsqu'un nouvel objet Uicontrol radio button ou toggle button est sélectionné.
WindowButtonDownFcn FigurePropriété WindowButtonDownFcn de l'objet Figure Exécutée lorsqu'un bouton de la souris est pressé au sein de l'objet Figure.
WindowButtonMotionFcn FigurePropriété WindowButtonMotionFcn de l'objet Figure Exécutée lors du déplacement de la souris au sein de l'objet Figure.
WindowButtonUpFcn FigurePropriété WindowButtonUpFcn de l'objet Figure Exécutée lors du relâchement d'un bouton de la souris.
WindowKeyPressFcn FigurePropriété WindowKeyPressFcn de l'objet Figure Exécutée lors de l'appui sur une touche lorsque l'objet Figure ou l'un de ses enfants a le focus.
WindowKeyReleaseFcn FigurePropriété WindowKeyReleaseFcn de l'objet Figure Exécutée lors du relâchement d'une touche lorsque l'objet Figure ou l'un de ses enfants a le focus.
WindowScrollWheelFcn FigurePropriété WindowScrollWheelFcn de l'objet Figure Exécutée lors du défilement de la molette de la souris lorsque l'objet Figure ou l'un de ses enfants a le focus.

La fonction callback devra se présenter sous la forme suivante avec deux entrées :

  • Sans GUIDE :

     
    Sélectionnez
    function nomFonction(hObject, eventData)
  • Avec GUIDE :

     
    Sélectionnez
    function tagObjet_nomCallback(hObject, eventData, handles)

  • hObject sera le handle de l'objet qui aura subi l'évènement ;
  • eventData un argument soit vide (=[]), soit une structure possédant des informations propres à l'évènement survenu, ayant les champs suivants :

    Propriétés Champs Description
    KeyPressFcn
    KeyReleaseFcn
    WindowKeyPressFcn
    WindowKeyReleaseFcn
    Character Caractère interprété suite à l'appui de la/des touche(s).
    Key Nom de la touche pressée.
    Modifier Nom du modificateur ('shift', 'control', 'alt', 'command', [] sinon).
    WindowScrollWheelFcn VerticalScrollCount Nombre de crans passés de la molette.
    VerticalScrollAmount Nombre de lignes par cran fixé par le système.
    SelectionChangeFcn EventName Simple chaîne 'SelectionChanged'.
    OldValue Handle de l'objet précédemment sélectionné.
    NewValue Handle de l'objet nouvellement sélectionné.
    CellEditCallback Indices Indices [i,j] de la cellule éditée.
    PreviousData Donnée de la cellule avant édition.
    EditData Nouvelle donnée rentrée.
    NewData Nouvelle valeur interprétée effectivement affichée
    Error Erreur intervenue pendant l'interprétation
    CellSelectionCallback Indices Indices [i,j] de la/des cellule(s) sélectionnée(s).
  • handles une structure ayant pour champs les différents tags des objets de l'interface contenant leur handle respectif.

Attention : une fonction callback ne renvoie jamais de valeur.

Créé le 28 octobre 2012  par Winjerome

Lien : Write Callbacks for Apps Created Programmatically

Après avoir pris connaissance de la propriété à utiliser selon le tableau présenté dans Qu'est-ce qu'une fonction callback ?, on pourra assigner le comportement sous trois formes :

  1. Une chaîne de caractères
    Cette méthode ne conviendra que pour des codes très simples. L'expression contenue dans cette chaîne pourra contenir une simple ligne de code ou l'appel à une fonction.

     
    Sélectionnez
    uicontrol(...
        'Style','pushbutton',...
        'String','Hello',...
        'Callback','disp(''Hello World'')');

    Méthode toutefois déconseillée, et ce pour plusieurs raisons :

    • Le code est peu lisible (doublement des guillemets simples « ' », obligation d'ajouter des « ; » et « , » pour séparer les instructions), et impossible à déboguer.

    • L'expression est évaluée dans le workspace de base. Autrement dit, les variables définies dans la fonction de l'interface ne sont pas accessibles directement, et inversement pour les éventuelles variables créées dans l'expression.

    • Les autres sous-fonctions situées dans le même fichier m ne seront pas visibles, et donc inutilisables.

    • Une fonction utilisée seulement à cet emplacement peut ne pas être incluse automatiquement dans les dépendances lors du déploiement d'une application avec le MATLAB Compiler.
      Il faudra alors soit ajouter la ligne

       
      Sélectionnez
      % #function nomFonction

      soit ajouter la fonction avec l'option -a lors de la compilation avec la fonction mccDocumentation de la fonction mcc :

       
      Sélectionnez
      mcc -m application -a nom_fonction
  2. Un handle de fonction
    On fera passer le handle d'une fonction callback (voir Qu'est-ce qu'une fonction callback ?) à l'aide du symbole @ (voir Que représente le symbole @ ?).

    Exemple : action de confirmation suite à la fermeture de la fenêtre

     
    Sélectionnez
    figure('CloseRequestFcn',@my_closereq)
    % Ou :
    handleFigure = figure;
    set(handleFigure, 'CloseRequestFcn', @my_closereq)

    Avec

     
    Sélectionnez
    function my_closereq(hObject ,eventData)
        selection = questdlg('Voulez-vous vraiment fermer cette fenêtre ?',...
            'Confirmation',...
            'Oui','Non','Oui');
        if strcmp(selection , 'Oui')
            delete(hObject)
        end
    end
  3. Un tableau de cellules
    Cette méthode permet de faire facilement passer des arguments supplémentaires. Dans la première cellule, on retrouve le handle ou le nom de la fonction callback, et dans les suivantes les arguments supplémentaires.

    Exemple : initialiser lors de sa création un objet Uicontrol Pop-up menu avec ses éléments et celui sélectionné :

     
    Sélectionnez
    items = {'item1';'item2';'item3'};
    index_initial = 2;
    uicontrol(...
        'Style','popupmenu',...
        'CreateFcn', {@my_create, items, index_initial})
    % Ou :
    uicontrol(...
        'Style','popupmenu',...
        'CreateFcn', {'my_create', items, index_initial})
    % Ou encore avec la méthode précédente :
    uicontrol(...
        'Style','popupmenu',...
        'CreateFcn', @(hObject, eventdata) my_create(hObject, eventdata, items, select) )

    Avec

     
    Sélectionnez
    function my_create(hObject, eventData, items, index)
    set(hObject,...
        'String', items,...
        'Value', index)

    Les changements effectués par la suite sur les variables passées en paramètre ne seront pas répercutés lors des appels à la fonction callback, ce seront les valeurs au moment de l'affectation du callback qui seront prises en compte.

Sous GUIDE, cette affectation se fait par le « Property Inspector » de l'objet en appuyant sur le bouton Image non disponible en face de la propriété correspondante qui va automatiquement créer la fonction dans le fichier .m rattaché.

Créé le 28 octobre 2012  par Winjerome

Lien : Write Callbacks for Apps Created Programmatically

Récupérer les arguments d'entrée passés à l'interface

  • Ceci, contrairement à ce que l'on pourrait penser, ne se fait pas dans la fonction principale, mais au sein de la sous-fonction nommée nom_interface_OpeningFcn, automatiquement définie par GUIDE ainsi (nom_interface étant le nom que vous avez fixé) :

     
    Sélectionnez
    function nom_interface_OpeningFcn(hObject, eventdata, handles, varargin)

    Cette fonction prend les paramètres :

    1. hObject : le handle de l'objet Figure de l'interface ;
    2. eventdata : argument vide (=[]) ne servant actuellement pas ;
    3. handles : la structure contenant les handles de tous les objets ayant leur propriété 'Tag' définie, constituant l'interface ;
    4. varargin : un tableau de cellules qui contient les entrées passées à la fonction principale.

    C'est donc ce dernier paramètre varargin qui nous intéresse. Pour un appel de la forme :

     
    Sélectionnez
    nom_interface(entree1, entree2, …)

    Vous pourrez récupérer les entrées comme ceci (notez l'utilisation d'accolades) :

     
    Sélectionnez
    function nom_interface_OpeningFcn(hObject, eventdata, handles, varargin)
    entree1 = varargin{1};
    entree2 = varargin{2};
    …

    N'oubliez pas de sauvegarder la structure handles dès que vous la modifiez (si vous y stockez, par exemple, ces paramètres ou toute autre variable qui a été obtenue à partir de ces éléments afin de les rendre disponibles dans les autres fonctions de l'interface) à l'aide de la fonction guidataDocumentation de la fonction guidata :

     
    Sélectionnez
    handles.nom = valeur;
    …
    guidata(hObject, handles)

Ressortir les arguments de l'interface

  • Il y a symétriquement la sous-fonction nommée nom_interface_OutputFcn pour effectuer cela. Elle se présente comme ceci :

     
    Sélectionnez
    function varargout = nom_interface_OutputFcn(hObject, eventdata, handles)

    Avec :

    1. hObject : le handle de l'objet Figure de l'interface ;
    2. eventdata : argument vide (=[]) ne servant actuellement pas ;
    3. handles : la structure contenant les handles de tous les objets constituant l'interface ayant leur propriété 'Tag' définie, auxquels s'ajoutent les éventuels champs que vous avez ajoutés ;
    4. varargout : tableau de cellules, qui contiendra tous les arguments de sortie.

    Ce dernier paramètre permettra donc de faire sortir les paramètres en utilisant la syntaxe qui suit (notez l'utilisation d'accolades) :

     
    Sélectionnez
    function varargout = nom_interface_OutputFcn(hObject, eventdata, handles) 
    varargout{1} = sortie1;
    varargout{2} = sortie2;
    …

    La fonction de l'interface sera alors appelée comme toute autre fonction sous la forme :

     
    Sélectionnez
    [sortie1, sortie2, …] = nom_interface(entree1, entree2, …);

    À noter que par défaut, la fonction nom_interface_OutputFcn est exécutée de suite, et les arguments directement retournés depuis l'appel à la fonction principale.
    Pour éviter cela, il faut décommenter la ligne uiwaitDocumentation de la fonction uiwait située dans la fonction nom_interface_OpeningFcn qui permettra d'attendre jusqu'à un appel à uiresumeDocumentation de la fonction uiresume effectué suite à une action de fermeture de l'interface, typiquement :

    • un appui sur la croix rouge de la fenêtre : dans la fonction callback CloseRequestFcn de l'objet Figure où l'on pourra éventuellement demander la confirmation de fermeture de l'interface avant d'effectivement faire appel à la fonction uiresume (un exemple dans le 2. de ce sujetComment utiliser une fonction callback ?) ;
    • un appui sur un bouton « OK » de validation : dans sa fonction callback associée, où l'on pourra vérifier les paramètres saisis avant d'effectivement faire appel à la fonction uiresume et afficher un message le cas échéant.

    Ensuite les arguments seront retournés.

Créé le 13 août 2014  par Winjerome

Lien : Qu'est-ce que nargin/nargout - varargin/varargout ?
Lien : Qu'est-ce qu'un handle ?
Lien : Qu'est ce qu'un tableau de cellules ?

La particularité de l'outil GUIDE de MATLAB est qu'il appelle ses fonctions callback de la manière suivante (nom_interface étant le nom que vous avez fixé) :

 
Sélectionnez
nom_interface('nom_fonction_callback', autres paramètres…);

appelant ainsi la fonction principale, comme vous l'appelleriez communément pour l'utiliser. Afin de traiter ces appels spéciaux, les lignes suivantes (insérées automatiquement au début de chaque fichier .m créé par GUIDE) se chargent de vérifier si le premier paramètre est une chaine de caractères, et le cas échant de « tenter » de la convertir en handle de fonction avec str2funcDocumentation de la fonction str2func.

 
Sélectionnez
%      NOM_INTERFACE('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in NOM_INTERFACE.M with the given input arguments.
[...]
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

Mais si dans votre utilisation vous passez n'importe quelle chaine de caractères cette conversion échouera inévitablement, vous donnant le message suivant :

 
Sélectionnez
Warning: The input to STR2FUNC "<votre chaîne>" is not a valid function name. This will generate an error in a future release.

Afin de contourner cela, une astuce toute simple consistera à passer votre chaine au sein d'un tableau de cellules.

 
Sélectionnez
% au lieu de :
nom_interface('ma chaine', autres paramètres…);
% nous aurons : 
nom_interface({'ma chaine'}, autres paramètres…);

(La condition ischar(varargin{1}) = ischar({'ma chaine'}) retournant alors false, contrairement à ischar('ma chaine') = true)

La récupération de cette chaine dans la fonction nom_interface_OpeningFcn se fera alors comme ceci (notez l'utilisation d'accolades) :

 
Sélectionnez
function nom_interface_OpeningFcn(hObject, eventdata, handles, varargin)
ma_chaine = varargin{1}{1};
Créé le 26 janvier 2018  par Winjerome

Lien : Comment gérer les arguments d'entrée et de sortie d'une interface créée avec GUIDE ?
Lien : Qu'est-ce que nargin/nargout - varargin/varargout ?

Nous avons vu précédemment comment mettre une image en arrière-plan dans une interface, ainsi que l'impossibilité de rendre les objets Uicontrol Text transparents.

L'astuce consiste à utiliser la fonction textDocumentation de la fonction text qui crée un objet Text ayant par défaut sa propriété BackgroundColorPropriété BackgroundColor de l'objet Text à 'none' (transparent) :

 
Sélectionnez
handleAxes % du sujet « Comment mettre une image en arrière-plan ? » 
handleText = text(0.5, 0.5,...
    'Sans le fond,',...
    'Parent', handleAxes,...
    'Color', 'white',...
    'FontSize', 12,...
    'FontWeight', 'bold',...
    'Units', 'normalized',...
    'HorizontAlalignment', 'center',...
    'VerticalAlignment', 'middle');
uistack(handleText, 'top');
Image non disponible
Créé le 12 avril 2017  par Gooby

Pour rendre exclusive la sélection de plusieurs objets Uicontrol RadioButton, il existe trois solutions.

1) Dans le cas d'une interface programmée à la main, ajouter à la fontion callback rattachée à la propriété Callback de chacun des objets Uicontrol RadioButton, les lignes suivantes :

 
Sélectionnez
h = findobj(gcbf, 'style', 'radio');
set(h, 'value', 0);
set(gcbo, 'value', 1);

2) Dans le cas d'une interface programmée avec le GUIDE, la fontion callback rattachée à la propriété Callback de chacun des objets RadioButton doit ressembler à ceci :

 
Sélectionnez
function <Tag de l'objet RadioButton>_Callback(hObject, eventdata, handles)
% hObject    handle to <Tag de l'objet RadioButton> (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

if (get(hObject,'Value') == get(hObject,'Max'))
    % Radio button is selected-take approriate action
    h = findobj(gcbf, 'style', 'radio');
    set(h, 'value', 0);
    set(hObject, 'value', 1);
else
    % Radio button is not selected-take approriate action
end
% Hint: get(hObject, 'Value') returns toggle state of <Tag de l'objet RadioButton>

3) La dernière solution (conseillée) consiste à intégrer les objets RadioButton dans un objet UiButtonGroup comme ceci :

 
Sélectionnez
p = uibuttongroup('position',[.1 .1 .5 .5]);
uicontrol('style', 'radio', 'parent', p, 'position', [10 50 50 20])
uicontrol('style', 'radio', 'parent', p, 'position', [10 10 50 20])
Mis à jour le 17 juin 2007  par Jérôme Briot

Non. Les objets de type Uicontrol (Pushbutton, EditText, Slider, ListBox…) ne possèdent pas de propriété permettant de les rendre transparents.

Créé le 3 septembre 2007  par Jérôme Briot

Les interfaces graphiques se positionnent aisément à l'aide de la fonction moveguiDocumentation de la fonction movegui.

Par exemple, pour placer l'interface graphique au centre de l'écran :

 
Sélectionnez
movegui('center');
Créé le 3 septembre 2007  par Caro-Line

Il n'existe pas de fonction dans MATLAB permettant d'ouvrir une interface graphique en plein écran.

Une solution simple consiste à faire :

 
Sélectionnez
fig = figure;
set(fig, 'Units', 'Normalized', 'Position', [0 0 1 1]);

Malheureusement, ceci n'assure pas toujours que la figure obtenue sera plein écran (conflit avec la Barre des Tâches de Windows par exemple).

Une autre possibilité est d'utiliser la propriété OuterPosition plutôt que Position. Suivant le système d'exploitation elle semble donner de meilleurs résultats.

Plusieurs contributions existent néanmoins sur le File Exchange (faire une recherche avec « figure maximize »), parmi lesquelles on peut trouver la fonction multiplateforme maximize.

Voir aussi cette solution : Is it possible to maximize, minimize or get the state of my figure programmatically in MATLAB?

Mis à jour le 1er juillet 2010  par Jérôme Briot

La police du titre d'un objet Figure est celle définie par le système d'exploitation pour les fenêtres donc il n'est pas possible de la changer depuis MATLAB.

Par contre, pour tous les autres objets, il est possible de modifier la police de caractères en ajustant les propriétés FontAngle, FontName, FontSize, FontUnits, FontWeight.

Il peut être utile d'utiliser la police obtenue par la commande suivante :

 
Sélectionnez
fontName = get(0, 'FixedWidthFontName')

Cette police est celle, pour la plateforme en cours, telle que chaque lettre fait la même largeur.

Cela peut-être très utile par exemple pour créer des structures arborescentes, ou des tableaux dans des objets de type liste.

Mis à jour le 5 mars 2008  par Caro-Line

Lien : Présentation des objets graphiques

Cette action est interdite. En effet, l'icône en haut à gauche d'un objet Figure représente le logo MATLAB et sa modification entraine la rupture du contrat de licence MATLAB.

Créé le 5 novembre 2007  par Jérôme Briot

Lien : How can I control the appearance of the title bar and the title bar icon ?

Deux solutions peuvent être utilisées :

  • Utiliser l'unité normalized

    Exemple :

     
    Sélectionnez
    f = figure('Units', 'normalized', 'Position', [0.1 0.1 0.5 0.5]);

    Et mettre aussi tous les objets enfants de la fenêtre en unité normalized
    Une possibilité pour cela est d'utiliser findobjDocumentation de la fonction findobj de la façon suivante :

     
    Sélectionnez
    % f étant le handle de la figure précédemment créée
    % findobj recherche ici tous les objets dans la figure f qui ont la propriété Units.
    set(findobj(f, '-property', 'Units'), 'Units', 'normalized');
  • Utiliser les propriétés de l'écran que l'on récupère avec get(0) :

    Exemple :

     
    Sélectionnez
    % Mettre les unités de l'écran et de la figure en pixels pour être sûr qu'ils aient la même unité
    unitsEcran = get(0, 'Units');
    set(0, 'Units', 'pixels');
    % On récupère la taille de l'écran
    posScreen = get(0, 'ScreenSize');
    % On gère la position de la fenêtre
    posFigure = [10 10 posScreen(3)/2 posScreen(4)/2];
    % On crée la figure avec les unités pixels
    f = figure('Units', 'pixels', 'Position', posFigure);
    % On remet les unités initiales de l'écran
    set(0, 'Units', unitsEcran);
Mis à jour le 15 juillet 2009  par Caro-Line

Cette solution n'est valable qu'à partir de MATLAB R2008a seulement.

L'affichage d'un tableau se fait à l'aide de la fonction uitableDocumentation de la fonction uitable comme ceci en fixant la propriété 'Data'  :

 
Sélectionnez
mesDonnees = rand(3);
uitable('Data', mesDonnees)
% ou après création avec set : 
handleUitable = uitable(.);
set(handleUitable, 'Data', mesDonnees)

Les données peuvent être des valeurs ou des chaînes de caractères ou absentes, il faut dans ce dernier cas utiliser un tableau de cellules :

 
Sélectionnez
mesDonnees = {...
    'Dupond' , 'Fernand', [];
    'Durant' ,   'Eric' , 36};
columnName = {'Nom', 'Prenom', 'Age'};
uitable('ColumnName', columnName,'Data', mesDonnees)

Les données ne pourront être introduites que toutes à la fois (éventuellement avec des données vides) et non case par case.
De nombreuses propriétés peuvent être rajoutées : la possibilité d'éditer les colonnes ou non (propriété ColumnEditablePropriété ColumnEditable de l'objet Uitable), l'utilisation de listes déroulantes et check box (propriété ColumnFormatPropriété ColumnFormat de l'objet Uitable). La lecture de la documentation MATLAB (uitableDocumentation de la fonction uitable + Uitable PropertiesListe des propriétés de l'objet Uitable) sera alors utile.

Note aux utilisateurs de MATLAB R2008a : la fonction uitable a été « officiellement » intégrée sous votre version de MATLAB. Néanmoins, sous MATLAB R2008a, cette fonction présente de nombreux bogues et imperfections (corrigés et/ou améliorés dans les versions suivantes).

Mis à jour le 26 juin 2013  par Winjerome

Lien : Displaying Matrix Data in a GUI
Lien : Add Components to the GUI - Table

L'objet Uicontrol Edit n'admet par défaut qu'une seule ligne d'édition. Cette contrainte est imposée par les propriétés 'Min' et 'Max' (fixées par défaut à 0 et 1) :

  • si Max - Min <= 1, alors l'objet n'aura qu'une seule ligne ;
  • si Max - Min > 1, alors l'objet sera multiligne.

On fixera donc selon le comportement visé la bonne valeur de N (la propriété 'Min' étant mise à 0 par défaut).

Sans GUIDE :

 
Sélectionnez
handleEdit = uicontrol(...
    'Style','edit',...
    'Position',[100 100 200 50],...
    'Max',N)
% Ou
set(handleEdit , 'Max' , N)

Avec GUIDE : en fixant la valeur de la propriété 'Max' dans le « Property Inspector » de l'objet ou par le code :

 
Sélectionnez
set(handles.TagEdit , 'Max' , N)

avec TagEdit le champ rentré dans la propriété 'Tag'.

Créé le 28 octobre 2012  par Winjerome

Lien : How do I enter and evaluate multiple lines in a GUI edit box that I created in MATLAB?

Le principe est le même que pour rendre la saisie multiligne dans un objet Uicontrol Edit

  • si Max - Min <= 1, un seul élément peut être sélectionné ;
  • si Max - Min > 1, la sélection multiple est possible.
Créé le 28 octobre 2012  par Winjerome

Lien : How can I select multiple items from a GUI listbox?

L'astuce consiste mettre l'image dans un objet AxesDocumentation de l'objet Axes positionné sur tout l'objet Figure (ou partie selon le besoin). Cet objet Axes doit être rendu invisible et mis en arrière-plan.

 
Sélectionnez
img = imread('peppers.png', 'png');  % Charge l'image
handleAxes = axes('Units', 'Normalized', 'Position', [0 0 1 1]);  % Crée un objet Axes prenant toute la fenêtre
                                                                  % Vous pouvez bien sûr fixer vos dimensions selon votre besoin 
imagesc(img, 'Parent', handleAxes)  % Affiche l'image 
uistack(handleAxes, 'bottom')       % Place l'objet Axes en arrière-plan
set(handleAxes, 'Visible', 'off')   % Cache les marques "ticks"
Créé le 13 août 2014  par Winjerome

Il n'existe pour le moment aucune manière standard d'obtenir des onglets dans une interface.
On retiendra toutefois plusieurs façons de faire :

Créé le 13 août 2014  par Winjerome

Outre les objets UiPrésentation des objets graphiques - Les objets UI de base d'une interface, vous avez à votre disposition plusieurs boîtes de dialogue permettant de facilement communiquer avec l'utilisateur.

Sélection de fichiers / dossiers

  • uigetfileDocumentation de la fonction uigetfile : permet à l'utilisateur de sélectionner un ou plusieurs fichiers dans un dossier de son choix. C'est la fenêtre typique que l'on a par le menu Fichier → Ouvrir. (Attention : cette fonction ne sert qu'à obtenir le chemin du ou des fichier(s) sélectionné(s), en aucun cas à les ouvrir ou à lire leur contenu. Toujours penser à récupérer le deuxième argument du chemin.) ;
  • uiputfileDocumentation de la fonction uiputfile : permet à l'utilisateur de choisir le nom et dossier d'un fichier à sauvegarder. C'est la fenêtre typique que l'on a par le menu Fichier → Enregistrer. (De même que la précédente, cette fonction ne fait que retourner le chemin sous forme de chaîne de caractères, et l'argument du chemin est essentiel afin d'effectuer la sauvegarde dans le dossier choisi par l'utilisateur et non dans le répertoire courant.) ;
  • uigetdirDocumentation de la fonction uigetdir : permet à l'utilisateur de sélectionner un dossier.

Pour ces trois fonctions, pensez à vérifier le cas d'une valeur de retour à 0 (if isequal(FileName,0) …), correspondant un appui sur le bouton d'annulation ou la croix rouge, avant de continuer votre programme.

Messages

Saisie / Sélection

Interactions avec MATLAB et le workspace

Impression

Préférences

Personnalisation

Créé le 13 août 2014  par Winjerome

L'utilisation basique d'un objet Uicontrol Popupmenu se résume à ses deux propriétés 'String' et 'Value' :

  • 'String' contient la liste de tous les éléments sélectionnables dans un tableau de cellules, où chaque cellule contient une chaîne de caractères représentant un élément ;
  • 'Value' contient l'indice (du tableau de cellules précédent) de l'élément sélectionné par l'utilisateur.

Ainsi pour récupérer l'élément sélectionné, il suffit de récupérer ces deux propriétés :

 
Sélectionnez
elements = get(handle_du_popupmenu, 'String');
indice = get(handle_du_popupmenu, 'Value');

puis de prendre le indicee élément du tableau elements (notez les accolades) :

 
Sélectionnez
element_selectionne = elements{indice};

Remarque : cette récupération pourra en particulier se faire dans la fonction callback rattachée à la propriété 'Callback' de l'objet, signifiant que l'utilisateur vient de sélectionner un nouvel élément.

Il est possible de rentrer une simple chaîne de caractères où les éléments sont séparés par des « | », mais ceci rend la récupération des éléments plus complexe, aussi je vous le déconseille.

Exemple complet :

 
Sélectionnez
function exemple

uicontrol('style', 'popupmenu',...
    'Position', [200 200 100, 20],...
    'String', {'Item 1', 'Item 2', 'Item 3', 'Item 4'},...
    'Value', 2,... % Item 2 au début
    'Callback', @popupmenu_Callback)
 
function popupmenu_Callback(hObject, ~)
 
elements = get(hObject, 'String');
indice = get(hObject, 'Value');
element_selectionne = elements{indice};
fprintf('Nouvel élément sélectionné : %s\n', element_selectionne)
Créé le 13 août 2014  par Winjerome

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2007-2017 Developpez LLC Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.