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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaces Graphiques Discussion :

Boucle fonction close


Sujet :

Interfaces Graphiques

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2017
    Messages : 14
    Points : 12
    Points
    12
    Par défaut Boucle fonction close
    Bonjour,
    Je suis en train de créer un GUI, qui charge un fichier Excel et créé notamment un certain nombre de figures. J'ai rajouté un bouton "Clear" permettant de remettre le GUI à son état initial, et je souhaiterais aussi qu'il puisse fermer les figures. Pour ce faire j'ai déjà une première solution (un peu lourde...), pour chaque figure j'ai ce code lors du reset :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ~isempty(findobj('type','figure','name','XXX'))
        close(handles.YYY); %handles.YYY est le handles associé à la figure XXX
    end
    Etant donné que je vais avoir beaucoup de figures, j'ai pensé stocker tous les noms de figure dans une cellule handles.figure. j'aurais donc une boucle de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for i=1:length(handles.figures)
        if ~isempty(findobj(handles,'type','figure','name',char(handles.figures(1,i))))
            close(handles.figures{1,i})
        end
    end
    Le problème c'est que cela ne fonctionne pas, il me met :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Error using close
    Invalid figure handle.
    Je pense que c'est à cause des ' qui apparaissent dans le texte de la cellule lorsque je l'appelle dans close : handles.figures{1,1}='Exemple'

    J'ai fait la même chose pour supprimer les variables que le GUI ajoute au handles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for i=1:length(handles.variables)
        if isfield(handles,char(handles.variables(1,i)))
            handles=rmfield(handles,char(handles.variables(1,i)));
        end
    end
    Cela ne pose pas de problèmes car mes ' qui apparaissent dans le texte de la cellule sont compatibles avec l'utilisation de rmfield je pense.

    Si vous aviez une solution je suis preneur !

    Merci d'avance.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Essaie ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    close('all')
     
    figure('tag', 'main', 'name', 'main')
     
    for n = 1:10
        figure
    end
     
    h = findobj('type', 'figure', '-not', 'tag', 'main')
     
    close(h)
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2017
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Jerome Briot Voir le message
    Essaie ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    close('all')
     
    figure('tag', 'main', 'name', 'main')
     
    for n = 1:10
        figure
    end
     
    h = findobj('type', 'figure', '-not', 'tag', 'main')
     
    close(h)
    Super nickel, c'est pas lourd comme solution et ça fonctionne ! Merci beaucoup (ça faisait 2h que je me prenais la tête ahah) ! Seul problème, si d'autres figures sont ouvertes (en dehors de mon GUI), elles se ferment aussi et je souhaiterais éviter ça. J'ai essayé de rajouter un objhandles, pour restreindre la recherche des figures à celles crées par mon GUI, mais cela ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    h=findobj(gco,'type', 'figure', '-not', 'tag', 'figure1');
    close(h);
    Petite question bonus :
    Toujours dans ma routine clear, je souhaite en fait remettre le GUI dans son état après le lancement et l'exécution des commandes au lancement. Est-ce que cela ne serait pas plus simple/propre/possible de procéder comme ci-dessous plutôt que de tout supprimer et fermer :
    1. Lancement GUI + lignes exécutées au lancement avant qu'il soit visible
    2. Dernière ligne exécutée avant qu'il soit visible : stockage d'une copie du handle quelque part (à définir)
    3. Utilisation du GUI
    4. Lors de la remise à 0 avec un bouton reset : remplacement du handles actuel par celui copié à l'étape 2 --> RAZ du GUI
    Merci !

  4. #4
    Membre à l'essai
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2017
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    Bonjour,
    Problème résolu, j'ai procédé comme ci-dessous. J'ai d'abord créé une cellule contenant les noms de toutes les figures que peut créer le GUI (créé lors du lancement du GUI et stocké dans le handles) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    handles.figures_names={'toto','tata',...
        'titi','tutu'};
    Et ensuite une petite boucle for :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for i=1:length(handles.figures_names)
         if ~isempty(findobj('type','figure','name',handles.figures_names{i}))
              close(handles.figures_names{i});
         end
    end
    Ce qui ressemble fortement à ce que je proposais dans mon premier message, mais ma manière de définir la cellule n'était pas la bonne d'où les messages d'erreur.

    Merci pour l'aide !

Discussions similaires

  1. Boucle, fonction et optimisation
    Par Neuromancien2 dans le forum Langage
    Réponses: 2
    Dernier message: 11/05/2009, 17h56
  2. Utilisation de la fonction .close()
    Par Thomas_ats dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 14/05/2007, 17h33
  3. blocage sur la fonction close()
    Par crischprolch dans le forum C
    Réponses: 3
    Dernier message: 23/01/2007, 13h28
  4. fonction close sur un bouton
    Par kenshyro dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 19/10/2006, 00h01
  5. [FLASH 8] boucle fonction sur bouton
    Par bractar dans le forum Flash
    Réponses: 2
    Dernier message: 31/01/2006, 18h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo