Comment créer des dynamiques de Rappels dans MATLAB?
J'ai cette ligne de code:
delete_btn = uicontrol(rr_ops, 'Style', 'pushbutton', 'String', 'Delete Graphic', 'Position', [13 135 98 20], ...
'Callback', 'delete_graphic');
et un peu supérieure à cette fonction:
function delete_graphic
global rr_list
selected = get(rr_list, 'Value');
selected
return;
pourquoi ce code ne fonctionne pas? Je ne comprends pas...
De quoi ai-je besoin? J'ai créer un bouton et une zone de liste, en cliquant sur le bouton - de la suppression de l'élément sélectionné dans la liste.
Thx pour obtenir de l'aide.
PS
Toujours cette erreur:
??? Undefined function or variable 'delete_graphic'.
??? Error while evaluating uicontrol Callback
voici tout mon code: http://paste.ubuntu.com/540094/ (ligne 185)
OriginalL'auteur AndrewShmig | 2010-12-05
Vous devez vous connecter pour publier un commentaire.
Généralement une préférence de manière à définir une fonction de rappel est d'utiliser un la fonction de poignée au lieu d'une chaîne. Lorsque vous utilisez une chaîne de caractères, le code de la chaîne est évalué dans la base de l'espace de travail. Cela signifie que toutes les variables et les fonctions utilisées dans la chaîne d'exister dans la base de l'espace de travail lorsque le rappel est évaluée. Cela rend pour un pauvre GUI conception, puisque vous ne voulez pas vraiment le fonctionnement de votre interface graphique dépend de la base de l'espace de travail (l'utilisateur peut modifier facilement, donc potentiellement de la rupture de votre interface).
Ce qui explique aussi l'erreur que vous obtenez. La fonction
delete_graphic
est défini comme un sous-fonction dans votre fichierrr_intervals.m
. Subfunctions ne peut être appelé par d'autres fonctions telles que définies dans la même m-file, doncdelete_graphic
n'est pas visible dans la base de l'espace de travail (où votre chaîne de callback qui est évalué). À l'aide d'une fonction de poignée de rappel est une meilleure alternative. Voici comment faire:'delete_graphic'
à@delete_graphic
.Modifier la définition de la fonction de
delete_graphic
(ligne 185):où
hObject
est le handle de l'objet de l'émission le rappel, eteventdata
est facultatif des données fournies lorsque le rappel est émis.EDIT:
Si vous souhaitez passer d'autres arguments pour
delete_graphic
, vous pouvez effectuer les étapes suivantes:Ajoutez les arguments d'entrée à la fin de la définition de la fonction. Par exemple:
Utiliser un tableau de cellule lorsque vous définissez la fonction de rappel pour votre bouton, où la première cellule contient la fonction de la poignée et de la suite les cellules contiennent chacun un argument d'entrée. Par exemple:
Il ya un inconvénient à ce, qui est que les valeurs
A
etB
stockées dans la matrice de cellules sont fixé à ce qu'ils sont lorsque vous définissez la fonction de rappel. Si vous modifiezA
ouB
dans votre code, il ne modifier les valeurs stockées dans la cellule-matrice de rappel.Si vous n'êtes pas en mesure d'utiliser la solution ci-dessus (c'est à dire si
A
etB
besoin de modifier la valeur), il y a un peu d'autres options pour la façon dont vous pouvez partager des données entre un GUI rappels:UserData
de la propriété d'un uicontrol objet. Pour accéder ou de mettre à jour, vous avez juste besoin de l'objet à manipuler.handles
structure de GUIDE d'crée pour stocker des données à l'aide de la GUIDATA fonction.J'ai ajouté un peu plus de détails pour ma réponse expliquant comment vous pouvez passer d'autres arguments à votre fonction.
OriginalL'auteur gnovice