Répondre

4

Vous devez transmettre la variable FileName d'un rappel à l'autre. Pour ce faire, vous pouvez affecter la variable au champ 'UserData' de pushbutton1. Votre code sous pushbutton1_Callback devrait ressembler à:

FileName=uigetfile(); 
set(handles.pushbutton1,'UserData',FileName); 

Ensuite, vous devez lire dans la variable sous vos pushbutton2_Callback:

FileName=get(handles.pushbutton1,'UserData'); 
img=imread(FileName); 

Si vous voulez vérifier vos résultats, vous pouvez toujours laisser les points-virgules hors de la fin des lignes.

1

Il existe une méthode générale pour stocker des données avec votre interface graphique pour une utilisation entre les rappels. Vous pouvez ajouter des champs arbitraires aux poignées d'objet, de sorte que vous pouvez mettre dans votre rappel pushbutton1

handles.filename = FileName; 
guidata(hObject,handles); 

La deuxième ligne est le code passe-partout que vous avez besoin de mettre à la fin de chaque rappel qui modifie les valeurs dans la structure des poignées. Maintenant, tous vos rappels auront accès au nom de fichier.

Dans votre cas, en rappel 2, vous auriez

img = imread(handles.filename); 

Bien sûr, vous pouvez utiliser cette image plus tard dans une autre fonction, de sorte que vous pouvez stocker dans des poignées trop

handles.img = img; 
guidata(hObject, handles); 
+0

Vous peut faire effectivement la même chose avec setappdata et getappdata sans avoir à se souvenir du bit guidata. – Adrian

+0

Mais alors vous devez connaître la poignée de la figure, non? Je suppose que vous pouvez appeler gcf, mais vous rencontrerez un problème si l'utilisateur a maximisé une autre fenêtre avant que votre callback soit exécuté. Je préfère quand même la notation de référence par points. – Marc