Bonjour,

Je viens vers vous pour un problème que je rencontre avec un de mes scripts avec interface utilisateur sur MATLAB R2009b. J'ai réussi à résoudre le problème mais je ne comprends pas le fonctionnement latent.

Voici directement le code très simple (j'utilise une syntaxe moche mais qui fonctionne : écrire dans le callback directement les instructions en chaine de caractères) :

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
clear all
 
guy(1).name = 'Tata';
guy(2).name = 'Titi';
guy(3).name = 'Toto';
guy(4).name = 'Tutu';
 
for i=1:length(guy)
    h = uicontrol('Style', 'pushbutton', 'String', guy(i).name,...
        'Position', [10 5+40*(i-1) 160 35], 'Callback', 'disp(guy(i).name);');
end
 
% for i=1:length(guy)
%     h = uicontrol('Style', 'pushbutton', 'String', guy(i).name,...
%         'Position', [10 5+40*(i-1) 160 35], 'Callback', ['disp(''',guy(i).name,''');']);
% end
Je vous propose d'essayer le code directement, ce sera plus parlant. La première instruction affichera 'Tutu' quel que soit le bouton choisi alors que la deuxième (à décommenter pour essayer) affichera le nom correspondant au bouton. On dirait que la première syntaxe évalue l'expression seulement au choix du bouton alors que la deuxième le fait pendant l'exécution du code.

Je cherche pas d'aide pour améliorer le code (utiliser des appels de fonctions etc.) mais juste à savoir si quelqu'un a une explication rationelle pour ce fonctionnement qui me parait incompréhensible (les deux chaines de caractères dans les callbacks sont censées être identiques).