How do I call on a function created outside of the App Editor?

9 visualizaciones (últimos 30 días)
Mark Lepage
Mark Lepage el 25 de Sept. de 2018
Editada: Stephen23 el 28 de Sept. de 2018
Not sure if I am describing my problem correctly, but what I would like to do is call on a script/function I have created when a user presses a button in my app.
For instance, I have a script that will take a use inputted image, run analysis on it, and output the results. Everything works fine when it is run as a script, and so was hoping to port this over to an app, where the use inputs the image, and clicks an "Analyze" button, which would run the script I have created.
This is my first time trying to create an app and I find the documentation very poor. I can't find any information regarding this online.

Respuestas (2)

Prem Kumar Tiwari
Prem Kumar Tiwari el 28 de Sept. de 2018
Hopefully you are using App Designer to create the GUI. You can refer to Call Backs for GUI in Matlab documentation and related to learn more on how to add callbacks to the buttons.
  6 comentarios
Mark Lepage
Mark Lepage el 28 de Sept. de 2018
Thank you for your reply.
I figured it out by adding the script to Matlab path (it asked me this when I tried to run the script in the Editor instead of the app).
I will update my code accordingly removing fullfile.
As for the functions vs scripts. I don't really care which I use, I am comfortable coding them as scripts or as functions and so I asked in case one might be easier to implement than the other.
My concern is that down the road, I will need to pass this application on to other users, and thus was wondering what I need to do within the app itself to identify the location of the script.
For instance, if I compile the app, and send it to someone else, how does the app recognize where the script will be located?
Thank you very much for your help
Stephen23
Stephen23 el 28 de Sept. de 2018
Editada: Stephen23 el 28 de Sept. de 2018
"how does the app recognize where the script will be located?"
It can't. You have to tell it.
It is not possible to save a script/function anywhere and expect MATLAB (or any other application) to find it within a finite (or reasonably short) length of time. Applications, like MATLAB, do not just magically know everything that is saved everywhere on a computer's harddrive (which these days also includes all kinds of links and clouds and who knows what else...). Even Windows, when it tries to keep track of all user documents for indexing purposes, has to create a huge database, which takes time to trawl through ... this is simply not feasible for an application like MATLAB: call a function, then wait thirty minutes while the entire harddrive gets searched... and then finally you get the output from max.
This is why applications install all of their files into just a few folders in program files (on Windows) and some user folders. Then, within those directories, the structure remains the same, so they can use relative paths to access everything, just where it should be. They don't look everywhere.
And for most programming languages, like MATLAB, functions/scripts have to be on some kind of search path in order for them to be found automatically by the application. The MATLAB Search Path is easy to change, so if your user wants to put their files in a highly unusual location, then they can do this. More power to them.
You have the choice of letting the user set/choose a path (e.g. uigetdir) as the root directory for where they save all of these files (possibly including subdirectories, so you can use relative paths or private folders). Or you can tell them to always put the files into the same location, e.g. C:\mycode, and then add that path automatically at the start of your first script. They might not like it, but it would work.
Or you could use a configuration file, where the user has to specify all of the path to the data and functions/scripts. Configuration files are neat and intuitive (if well designed).
Probably about now you will start to realize that there is no simple answer... because there is no simple answer. At some point you have to tell any application (e.g. MATLAB) where the files are. How you do that, e.g. with a user defined root directory or a fixed location, depends on you and your users and your use case and their write permissions and their sys-admins and many other things that we know nothing about.
At some point you have to trust your users that they can save your script into their MATLAB directory, and can actually use MATLAB. Creating some complex code that automagically installs and fiddles with the Search Path might sound great, but unless you have written a toolbox with thousands of files, this would just take lots of your time, and not bring any real benefit.
"For instance, if I compile the app, and send it to someone else..."
Compiled code is a totally different kettle of fish. Search this forum to know more, e.g.:
etc.

Iniciar sesión para comentar.


Stephen23
Stephen23 el 28 de Sept. de 2018
Editada: Stephen23 el 28 de Sept. de 2018
"How do I actually point the App to the script located on my computer?"
Simple, just change the MATLAB Search Path., because that is exactly what the MATLAB Search Path is for:
The Search Path is just a list of directories to tell MATLAB where you have scripts/functions/classes saved, so that it can look for them there. Once you add those directories to the path:
then you can just call those scripts/functions normally. Programming languages require a search path because looking everywhere for functions or scripts is
  1. impossible
  2. very slow
"Is there a way to store the scripts within the app itself??"
Probably you could convert them to functions and include them in the same file, but this is unlikely to be a good idea: keeping functions and scripts in functionally distinct categories and directories makes management and maintenance much easier. I doubt that it would help you to put everything into one big file.
  2 comentarios
Dennis
Dennis el 28 de Sept. de 2018
When you pass the app to others - do they need to edit the code? If not you can use 'Deploy App' inside appdesigner there is a field for additional functions/files/images/data your application needs. I think it will work with scripts aswell.
Stephen23
Stephen23 el 28 de Sept. de 2018
Editada: Stephen23 el 28 de Sept. de 2018
@Dennis: I have never used GUIDE or AppDesigner, so I have no idea.
I write my own GUI code, which does not need to be edited, and works from any directory on the MATLAB Search Path. I find that easier.

Iniciar sesión para comentar.

Categorías

Más información sobre File Operations en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by