Bonjour,
Je ne savais vraiment où mettre cette discussion...
J'ai codé une gui à la main.
dans cette gui, il y a une figure et deux boutons.
Le bouton 'b1' appelle une fonction 'fct_1' et 'b2' appelant 'fct_2'.
Mon problème :
je clique sur le 'b1' : très bien,
puis je clique sur 'b2' : toujours très bien.
je clique de nouveau sur 'b1' : ça plante.
Voila, une partie du code (c'est dans un même fichier) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 function MonInterface %figure %bouton 'b1' avec callback sur 'fct_1' %bouton 'b2' avec callback sur 'fct_2' data = guihandles (gcf); data.h = 0; guidata(gcf, data);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 function fct_1 (obj, evt) data = guidata(gcbf); % traitements % nécessite l'appel de fct_2 guidata(gcbf, data); disp(data.h); % 26.005 fct_2; disp(data.h); % 26.005 guidata(gcbf, data); disp(data.h); % 26.005Mes tests m'ont mené à supprimer la ligne 9 de la fonction fct_1 : ça ne plante plus.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 function fct_2 (obj, evt) data = guidata(gcbf); % traitements disp(data.h); % 26.005 % destruction data.h % création data.h disp(data.h); % 26.0051 guidata(gcbf, data); disp(data.h); % 26.0051
Question 1 :
Pourquoi la data de la fonction fct_1 contient elle une ancienne valeur pour le handler 'h', alors qu'elle est mise à jour dans fct_2 ?
Question 2 :
Pour ne pas mettre une ancienne valeur du handler 'h', je ne termine pas la fonction par une sauvegarde de la data.
Est il grave si fct_1 ne se termine pas par une sauvegarde de la data ?
Je vous remercie pour vos réponses
Partager