1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2017
    Messages : 3
    Points : 1
    Points
    1

    Par défaut Actualiser une interface graphique

    Bonjour,

    J'ai créé un code me permettant de fit une courbe selon un certain nombre de Gaussienne.
    L'utilisateur choisit à l'aide de curseurs les modes des pics et les enregistre à l'aide d'un bouton.
    Cependant, à chaque fois que j'actualise mon plot (choix de la zone d'étude par l'utilisateur, ou fit de la courbe), une fenêtre supplémentaire s'ouvre pour chacun des boutons sur lesquels j'ai cliqué.
    Si je place un close sur le bouton ayant une fonction plot, je ferme tout (placé après) ou rien (placé avant le plot). Si je place un close dans les boutons intermédiaires, je ferme mon interface trop tôt.

    Bref, comment puis-je faire en sorte que soit mon interface s'actualise sans ouvrir de fenêtres supplémentaires ou pour fermer automatiquement les dites fenêtres lorsque je les traces afin de ne pas inonder l'utilisateurs de fenêtres inutiles.

    Merci d'avance.

  2. #2
    Membre éprouvé Avatar de soft001
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    avril 2008
    Messages
    395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : avril 2008
    Messages : 395
    Points : 1 097
    Points
    1 097

    Par défaut

    Montre nous un exemple !!
    Sinon, tu peux choisir quelle fenêtre tu veux fermer en utilisant son handle comme paramètre d'entrée à la fonction close.
    Si tu trouves ma réponse utile, n'oublies pas de voter pour ce me message

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2017
    Messages : 3
    Points : 1
    Points
    1

    Par défaut

    Voilà une capture d'écran de ce qui se passe.
    Je choisis mes bornes inférieures et supérieures à l'aide de mes curseurs, j'ai alors sur l'utilisation de ces deux boutons bien une seule fenêtre.
    Quand je clique sur "création de la plage de donnée", j'ai trois fenêtres qui s'ouvrent, correspondant aux trois étapes ayant menées à la création de cette nouvelle fenêtre (choix de la borne inf, de la borne supp, et plot de la figure).
    J'ai le même soucis lorsque j'utilises le bouton "fiter n pics", ce qui m'ouvre alors n+1 fenêtres supplémentaires (mode des n pics choisis grâce à des curseurs et plot.
    Cela devient donc vite envahissant.
    Images attachées Images attachées  

  4. #4
    Membre éprouvé Avatar de soft001
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    avril 2008
    Messages
    395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : avril 2008
    Messages : 395
    Points : 1 097
    Points
    1 097

    Par défaut

    D'abord, pour tes trois boutons, montre nous leurs fonctions Callback.
    Si tu trouves ma réponse utile, n'oublies pas de voter pour ce me message

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2017
    Messages : 3
    Points : 1
    Points
    1

    Par défaut

    Voici mes différentes fonctions callback

    Pour la définition de la borne inférieur de mon domaine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    % Enregistre la position de la borne inférieure 
    function borneinf_Callback(hObject, eventdata, handles)
     
        dcm = datacursormode(gcf);
        get(dcm);
        datacursor_position1=get(ancestor(gca, 'axes'), 'CurrentPoint')
        cursor1=datacursor_position1(1,1);
        save cursor1.mat
    Idem pour la borne supérieure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    % Enregistre la position de la borne suppérieur 
    function bornesup_Callback(hObject, eventdata, handles)
     
        dcm = datacursormode(gcf);
        get(dcm);
        datacursor_position2 = get(ancestor(gca, 'axes'), 'CurrentPoint')
        cursor2 = datacursor_position2(1,1);
        save cursor2.mat
    Et enfin, la fonction traçant la nouvelle figure, et qui lorsqu'elle est appelée, fait apparaître trois fenêtres, comme montré sur le screen précédant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    % Trace le nouveau domaine en éliminant la ligne de base
    function newdata_Callback(hObject, eventdata, handles)
    data = load('sujet_6_-_Black-TiO2_ref-sp02-comb.txt');
    f = data(:,1);
    load cursor1.mat;
    load cursor2.mat;
    c1 = cursor1(1,1);
    c2 = cursor2(1,1);
     
    val_inf = min(c1,c2); 
    tmp_inf = abs(f-val_inf);
    % Cherche l'indice de la matrice correspondant au mode défini pour la borne
    % inf
    [idx_inf idx_inf] = min(tmp_inf); 
    borne_inf = idx_inf;
     
    val_sup = max(c1,c2); 
    tmp_sup = abs(f-val_sup);
    % Cherche l'indice de la matrice correspondant au mode défini pour la borne
    % sup
    [idx_sup idx_sup] = min(tmp_sup); 
    borne_sup = idx_sup;
     
    % Défini la nouvelle matrice
     
    new_matrice= [data(idx_inf:idx_sup,:)];
    min_matrice=min(new_matrice);
    max_matrice=max(new_matrice);
    min_mat=min_matrice(1,1);
    max_mat=max_matrice(1,1);
     
    % Elimination de la ligne de base
    base = new_matrice(1,2);
    L = length(new_matrice);
     
     
    for i = 1:L
        new_matrice(i,2) = new_matrice(i,2) - (new_matrice(L,2) - new_matrice(1,2))/L*i;
    end
    new_matrice(:,2) = new_matrice(:,2) - min(new_matrice(:,2));
     
    % Tracé du domaine défini, sans ligne de base
    datacursormode on
    plot(new_matrice(:,1),new_matrice(:,2));
    xlim([min_mat max_mat]);
    xlabel('Nombre d onde en cm-1 / Mode');
    ylabel('Nombre de coups');
     
    save new_matrice.mat;

  6. #6
    Membre éprouvé Avatar de soft001
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    avril 2008
    Messages
    395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : avril 2008
    Messages : 395
    Points : 1 097
    Points
    1 097

    Par défaut

    Bonjour voici mes modifications, tu as pas besoin de passer par le disque dur pour enregistrer tes bornes inf et sup (le tag de ton axe est axes1).

    Pour la définition de la borne inférieur de ton domaine:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    % Enregistre la position de la borne inférieure 
    function borneinf_Callback(hObject, eventdata, handles)dcm = datacursormode(gcf);
    if ~isempty(dcm.getCursorInfo)
    cursor1=dcm.getCursorInfo.Position(1);
    handles.cursor1 = cursor1;
    guidata(hObject, handles);
    else
        msgbox('Choisir Borne Inférieure!');
    end
    pour la borne supérieure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    % Enregistre la position de la borne suppérieur 
    function bornesup_Callback(hObject, eventdata, handles)
    dcm = datacursormode(gcf);
    if ~isempty(dcm.getCursorInfo)
    cursor2=dcm.getCursorInfo.Position(1);
    handles.cursor2 = cursor2;
    guidata(hObject, handles);
    else
        msgbox('Choisir Borne Supérieure!');
    end
    la fonction traçant la nouvelle figure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    % Trace le nouveau domaine en éliminant la ligne de base
    function newdata_Callback(hObject, eventdata, handles)
    data = load('sujet_6_-_Black-TiO2_ref-sp02-comb.txt');
     
    f = data(:,1);
    c1 = handles.cursor1;
    c2 = handles.cursor2;
     
    c = sort([c1;c2]); 
    val_inf = c(1);
    tmp_inf = abs(f-val_inf);
    % Cherche l'indice de la matrice correspondant au mode défini pour la borne
    % inf
    [~, idx_inf] = min(tmp_inf); 
     
     
    val_sup = c(end); 
    tmp_sup = abs(f-val_sup);
    % Cherche l'indice de la matrice correspondant au mode défini pour la borne
    % sup
    [~, idx_sup] = min(tmp_sup); 
     
     
    % Défini la nouvelle matrice
     
    new_matrice= data(idx_inf:idx_sup,:);
    min_matrice=min(new_matrice);
    max_matrice=max(new_matrice);
    min_mat=min_matrice(1,1);
    max_mat=max_matrice(1,1);
     
    % Elimination de la ligne de base
    base = new_matrice(1,2);
    L = length(new_matrice);
     
     
    for i = 1:L
        new_matrice(i,2) = new_matrice(i,2) - (new_matrice(L,2) - new_matrice(1,2))/L*i;
    end
    new_matrice(:,2) = new_matrice(:,2) - min(new_matrice(:,2));
     
    % Tracé du domaine défini, sans ligne de base
    datacursormode on
    plot(handles.axes1,new_matrice(:,1),new_matrice(:,2));
    xlim([min_mat max_mat]);
    xlabel('Nombre d onde en cm-1 / Mode');
    ylabel('Nombre de coups');
    handles.Data = new_matrice;
    guidata(hObject, handles);
     
    save new_matrice.mat;
    Si tu trouves ma réponse utile, n'oublies pas de voter pour ce me message

Discussions similaires

  1. Actualiser une interface graphique MATLAB
    Par imade1990 dans le forum Interfaces Graphiques
    Réponses: 5
    Dernier message: 06/12/2012, 16h18
  2. actualiser une interface graphique
    Par reeda dans le forum AWT/SWING
    Réponses: 3
    Dernier message: 15/09/2009, 18h54
  3. [C / Ada] Faire une interface graphique
    Par Casp dans le forum Ada
    Réponses: 6
    Dernier message: 15/04/2005, 15h06
  4. [RECHERCHE] un module pour developer une interface graphique
    Par romtrash dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 10/03/2005, 15h46
  5. comment fonctionne une interface graphique???
    Par elekis dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 27/10/2004, 23h10

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