Bonjour,
J'ai lu que la question avait déjà été posée par certains programmeurs anglais, mais jusque là, aucunes des réponses que j'ai pu trouver ne m'ont permis de trouver une solution à mon problème. Je débute dans l'utilisation des interfaces graphiques MATLAB et j'ai sans doutes besoin que l'on m'explique plus clairement la démarche à suivre.
J'ai créé à l'aide de l'outil MATLAB une GUI comprenant des sliders, pop-up Menu, push buttons. Le code généré automatiquement comprend donc pour tous ces éléments une partie fonction Callback qui permet l’exécution de différentes commandes lors d'une action sur la bouton, slider etc... (Exemple : function moyenne_slider_Callback(hObject, eventdata, handles)). Une autre partie est générée, c'est la partie CreateFnc (Exemple : function moyenne_slider_CreateFcn(hObject, eventdata, handles)) qui elle permet d'executer certaines commandes juste après la création de l'objet.
J'utilise cette interface dans un programme annexe de cette manière : (code du programme annexe)
simple_gui
waitfor(simple_gui)
Et je récupère un certain nombre de données rentrées ou non par l'utilisateur de cette manière : (code de l'interface simple_gui)
% Pour récupérer la valeur du slider lorsqu'elle est modifiée
function moyenne_slider_Callback(hObject, eventdata, handles)
choix_moyenne = get(hObject,'Value');
assignin('base','choix_moyenne',choix_moyenne);
...
% Pour récupérer la valeur du slider par défaut
function moyenne_slider_CreateFcn(hObject, eventdata, handles)
choix_moyenne = get(hObject,'Value');
assignin('base','choix_moyenne',choix_moyenne);
...
Cela marche très bien pour tous les sliders, push button et pop-up Menu et lorsque j'appuis sur le push button "Valider", je récupère bien toutes les valeurs dans mon workspace.
(code GUI push button valider)
function valider_Callback(hObject, eventdata, handles)
choix_valider = get(hObject,'Value');
assignin('base','choix_valider',choix_valider);
if choix_valider==1
close(simple_gui)
end
Le problème est que j'ai ajouté des checkbox à mon interface et que je ne parviens pas à répéter le processus car le code généré ne contient que la partie Callback et non la partie CreateFcn. Je ne peux donc récupérer dans mon programme annexe, que les valeurs modifiées des checkbox. C'est à dire que pour une checkbox avec comme valeur par défaut [0] (dans le "Property Inspector") , je ne peux récupérer la valeur 0 que si je check puis uncheck la case avant de cliquer sur "Valider", sinon je ne touche pas à la checkbox et que j’appuie sur "Valider", je ne récupère aucunes données sur mes différentes checkbox. Ce qui est normal puisque la fonction générée n'agit que lorsque la case est modifiée, c'est donc la tout mon problème, je n'arrive pas à récupérer la valeur par défaut de mes checkbox, sans avoir à y toucher sur mon interface.
J'ai notamment essayé dans mon programme annexe, après avoir ouvert ma GUI de faire :
simple_gui
hGui = findobj('Type','checkbox','Tag','calcul_gpu')
...
et voici le résultat :
hGui =
Empty matrix: 0-by-1
De même, j'ai essayé :
function valider_Callback(hObject, eventdata, handles)
choix_valider = get(hObject,'Value');
assignin('base','choix_valider',choix_valider);
if choix_resultats==0 | isempty(choix_resultats)
assignin('base','choix_resultat',0);
end
if choix_valider==1
close(simple_gui)
end
...
Mais là encore :
Undefined function or variable 'choix_resultats'.
Error in simple_gui>valider_Callback (line 277)
if choix_resultats==0 | isempty(choix_resultats)
J'ai pas mal cherché sur internet, et notamment sur le forum, des personnes avec un problème similaire (Ref : https://fr.mathworks.com/matlabcentral/newsreader/view_thread/155404 ou encore Ref : https://fr.mathworks.com/matlabcentral/answers/183135-getting-the-default-value-from-checkbox-in-multile-gui-s) mais je n'arrive toujours pas à récupérer ma valeur par défaut dans mes checkbox, alors si quelqu'un a la solution pour ça je suis preneur, et je veux bien quelques explications !
Merci d'avance,
Didier.
J'ai lu que la question avait déjà été posée par certains programmeurs anglais, mais jusque là, aucunes des réponses que j'ai pu trouver ne m'ont permis de trouver une solution à mon problème. Je débute dans l'utilisation des interfaces graphiques MATLAB et j'ai sans doutes besoin que l'on m'explique plus clairement la démarche à suivre.
J'ai créé à l'aide de l'outil MATLAB une GUI comprenant des sliders, pop-up Menu, push buttons. Le code généré automatiquement comprend donc pour tous ces éléments une partie fonction Callback qui permet l’exécution de différentes commandes lors d'une action sur la bouton, slider etc... (Exemple : function moyenne_slider_Callback(hObject, eventdata, handles)). Une autre partie est générée, c'est la partie CreateFnc (Exemple : function moyenne_slider_CreateFcn(hObject, eventdata, handles)) qui elle permet d'executer certaines commandes juste après la création de l'objet.
J'utilise cette interface dans un programme annexe de cette manière : (code du programme annexe)
simple_gui
waitfor(simple_gui)
Et je récupère un certain nombre de données rentrées ou non par l'utilisateur de cette manière : (code de l'interface simple_gui)
% Pour récupérer la valeur du slider lorsqu'elle est modifiée
function moyenne_slider_Callback(hObject, eventdata, handles)
choix_moyenne = get(hObject,'Value');
assignin('base','choix_moyenne',choix_moyenne);
...
% Pour récupérer la valeur du slider par défaut
function moyenne_slider_CreateFcn(hObject, eventdata, handles)
choix_moyenne = get(hObject,'Value');
assignin('base','choix_moyenne',choix_moyenne);
...
Cela marche très bien pour tous les sliders, push button et pop-up Menu et lorsque j'appuis sur le push button "Valider", je récupère bien toutes les valeurs dans mon workspace.
(code GUI push button valider)
function valider_Callback(hObject, eventdata, handles)
choix_valider = get(hObject,'Value');
assignin('base','choix_valider',choix_valider);
if choix_valider==1
close(simple_gui)
end
Le problème est que j'ai ajouté des checkbox à mon interface et que je ne parviens pas à répéter le processus car le code généré ne contient que la partie Callback et non la partie CreateFcn. Je ne peux donc récupérer dans mon programme annexe, que les valeurs modifiées des checkbox. C'est à dire que pour une checkbox avec comme valeur par défaut [0] (dans le "Property Inspector") , je ne peux récupérer la valeur 0 que si je check puis uncheck la case avant de cliquer sur "Valider", sinon je ne touche pas à la checkbox et que j’appuie sur "Valider", je ne récupère aucunes données sur mes différentes checkbox. Ce qui est normal puisque la fonction générée n'agit que lorsque la case est modifiée, c'est donc la tout mon problème, je n'arrive pas à récupérer la valeur par défaut de mes checkbox, sans avoir à y toucher sur mon interface.
J'ai notamment essayé dans mon programme annexe, après avoir ouvert ma GUI de faire :
simple_gui
hGui = findobj('Type','checkbox','Tag','calcul_gpu')
...
et voici le résultat :
hGui =
Empty matrix: 0-by-1
De même, j'ai essayé :
function valider_Callback(hObject, eventdata, handles)
choix_valider = get(hObject,'Value');
assignin('base','choix_valider',choix_valider);
if choix_resultats==0 | isempty(choix_resultats)
assignin('base','choix_resultat',0);
end
if choix_valider==1
close(simple_gui)
end
...
Mais là encore :
Undefined function or variable 'choix_resultats'.
Error in simple_gui>valider_Callback (line 277)
if choix_resultats==0 | isempty(choix_resultats)
J'ai pas mal cherché sur internet, et notamment sur le forum, des personnes avec un problème similaire (Ref : https://fr.mathworks.com/matlabcentral/newsreader/view_thread/155404 ou encore Ref : https://fr.mathworks.com/matlabcentral/answers/183135-getting-the-default-value-from-checkbox-in-multile-gui-s) mais je n'arrive toujours pas à récupérer ma valeur par défaut dans mes checkbox, alors si quelqu'un a la solution pour ça je suis preneur, et je veux bien quelques explications !
Merci d'avance,
Didier.