0

je les suivantes UIFigure:Appel d'une méthode définie dans une course Figure

classdef gui < matlab.apps.AppBase 
    ... 
    function app = gui 
     % Construct app 
    end 
    ... 
    properties (Access = public) 
     myFuncRef = @myFun 
    end 
    ... 
    function myFun(app) 
     % do something 
    end 
    ... 
end 

dans lequel j'ai défini la méthode myFun.

Si la figure est en cours d'exécution (c'est-à-dire qu'elle affiche une fenêtre), comment puis-je appeler la méthode myFun à partir de la fenêtre de commande de MATLAB? J'ai essayé avec

h = findobj(0, 'type', 'figure'); 
funcRef = get(h, 'myFuncRef'); 
funcRef(h); 

mais je reçois l'erreur

Une erreur est survenue lors de l'exécution de la simulation et la simulation a été TERMINATED causée par: Fonction « subsindex » est pas définie pour les valeurs de classe ' matlab.graphics.GraphicsPlaceholder '.

Merci d'avance!

Répondre

0

Essayez celui-ci:

h = findobj(gcf,'-method','myFuncRef') 

ou

h = findobj(0,'class','gui') 

laissez-moi savoir si cela fonctionne

Le gros problème est probablement que vous obtenez juste votre silhouette avec findobj(0, 'type', 'figure'), c'est juste un Grahics Obejct qui est manimulé par la classe App.

+0

Merci pour votre réponse. J'ai essayé la séquence h = findobj (0, 'class', 'gui'); funcRef = get (h, 'myFuncRef'); funcRef (h); et ça m'a donné la même erreur. Quand j'essaie h = findobj (gcf, '- méthode', 'myFuncRef') ça ne me donne pas d'erreur mais ça ouvre une fenêtre et ça ne marche pas. – pwm

0

D'abord, j'aimerais corriger l'erreur que vous recevez. La raison en est que le h retourné par votre appel à findobj() est vide. Au lieu de cela, vous devez utiliser findall(0,'Type','Figure',...)[src].

Je sais que cela est possible lorsque la méthode référencée est static. Compte tenu de la classe suivante:

classdef q45062561 < matlab.apps.AppBase 

    properties (Access = public) 
     myFuncRef = @q45062561.myFun 
    end 

    methods (Access = private, Static = true) 
    function myFun() 
     disp('This works!') 
    end 
    end 

end 

Ensuite, en cours d'exécution suivantes produirait le résultat souhaité:

>> F = q45062561; 
>> F.myFuncRef() 
This works! 

Notes:

  1. Plutôt que de trouver la poignée de la figure par findobj , Je le stocke juste pendant la création.
  2. Les modificateurs de myFun ne sont pas clairs de la question donc je ne peux pas savoir si cette solution est appropriée dans votre cas.
  3. Personnellement, je pense que c'est une meilleure idée de simplement définir la méthode public et/ou static, au lieu d'utiliser une référence de fonction stockée dans une propriété.