App Designer: Using function outputs as variables within other functions
    12 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
    Samuel Thompson
      
 il 13 Dic 2017
  
    
    
    
    
    Commentato: Mark Eigenraam
 il 13 Apr 2022
            I would like to store a variable as an output from a function in App Designer for use with other functions. Please see the simple example below.
properties (Access = private)
      x = linspace(0,1,10); % Description
  end
    methods (Access = private)
        function [y] = func(app)
            A = app.EditField.Value;
            B = A + 1;
            y = app.x.^2 + B;
            plot(app.UIAxes,app.x,y)                     
        end
I wish to use the variable 'y' from func(app) for use within the second function, func2(app).
        func2(app)
            plot(app.UIAxes2,app.x,y)
        end
    end
Any help would be appreciated, the example is trivial as both plots plot the same graph. I am just unaware of the syntax required as the App Designer environment has slight modifications from that of the usual MATLAB workspace.
Any help would be very appreciated,
Sam
(Using R2017b)
0 Commenti
Risposta accettata
  Chris Perkins
    
      
 il 15 Dic 2017
        
      Modificato: Chris Perkins
    
      
 il 15 Dic 2017
  
      Hi Sam,
The best way of storing data in one function in an AppDesigner app for use in another function is to create a new 'property', and set the property's value instead of creating a new local variable. Then, in your other functions, you have access to the app's properties and can use any property as needed.
The following documentation page describes this process in more detail, with examples:
https://www.mathworks.com/help/matlab/creating_guis/share-data-across-callbacks-in-app-designer.html
For example, create a new property 'y' in your 'properties'.
properties (Access = private)
    x = linspace(0,1,10); % Description
    y;  
end
Then, in func(app), set
app.y = app.x.^2 + B;
Then, in func2(app), you can have
plot(app.UIAxes2,app.x,app.y)
Più risposte (1)
  Mark Eigenraam
 il 11 Apr 2022
        As a follow on, I had a similar problem. if I run the following a = myapp (pass_in_data), after the user has made changes to pass_in_data, how do i send the updated data back to the mlapp that called myapp. Thanks 
6 Commenti
  Walter Roberson
      
      
 il 13 Apr 2022
				That example works by having the calling program provide an update method that the called app is responsible for invoking in order to export changes. That is certainly a valid thing to do, but it is not the same as saying that your app has "output".
You asked "how do i send the updated data back to the mlapp that called myapp" and the example you are looking at does not do that: instead it tells the calling app to update itself. Different dynamic.
  Mark Eigenraam
 il 13 Apr 2022
				Yes you are correct. I have written code (based on the Mathworks example) in the calling app now that updates its data, without closing the child app. I could have used better phrasing :) 
Vedere anche
Categorie
				Scopri di più su Data Type Identification in Help Center e File Exchange
			
	Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



