Running an m file by clicking on a pushbutton in GUI

Hiya,
I'm making a GUI using GUIDE and I want it to run a different file when i press a push button.
The file itself runs a few other files when it's run and gives an output of a series of variables with their values.
I was hoping I would be able to load and display these values in the GUI by running the file, and then be able to edit the values (still in the GUI).
Then, by pressing another pushbutton the GUI calls the file to calculate it's outputs using the updated variables and displays it.
I've tried using
run('myfile.m')
in the pushbutton callback, but the workspace isnt updated, so I'm not sure if it's actually being run or not.
alternatively I could call the GUI from the file, but I don't know how to do this either
Any help would be brilliant
Thanks

6 Comments

Help me Sirs, I make a script with variables then i make a GUI with push button to call variables from the script m.file to workspace, but nothing happened when GUI running - variables not appear in Workspace. Thanks
Same problem with me. Using run command, the *.m file runs very well but do not load the parameters in workspace.
@Amit Patankar is the file you are using run() for a script or a function? If it is a script, then it makes changes to the workspace of the function or script that the call to run() appears in. Do not use run() to try to work with variables in the base workspace: use evalin('base') for that.
I have rarely found run() to be advisable. The only case that I have seen it used as an interesting design choice, had to do with a package that allowed the users to create "plug-ins". Designing infrastructure for plug-ins always involves design trade-offs.
@Walter Roberson I am using a push button in App designer and in it's callback, I have written a Run command to run *.m files.
Just like when a *.m file is ran in command window of MATLAB and it loads all parameters into workspace, I expect that the push button should do it for me.
Well, it is loading the parameters into the workspace -- the workspace of the callback function.
As I wrote above:
Do not use run() to try to work with variables in the base workspace: use evalin('base') for that.

Sign in to comment.

 Accepted Answer

To run a m-file from a GUI, just insert the name of the m-file in the pushbutton callback function. It works the other way around. To open a GUI from a m-file, just type the name of the GUI in the m-file.
If you want your GUI to display values calculated within the m-file, you could define variables as global in both the GUI and the m-file.
If what you want is to display/send values to the workspace, you could use
assignin
from both your GUI or you m-file.
type
help assigin
or
doc assigin
in the command window to get all the information about the assigin built-in function.

4 Comments

ASSIGNIN is a method for poofing variables, a kind of remote creation. Therefore it usually creates more problems as it solves, similar to EVAL and EVALIN.
I've managed to get the variables from the workspace into gui, using evalin, so that the editbox shows these values when the gui starts.
However, when a user edits the number I save that entry as a new variable in the callback for that editbox.
I then use assignin to update the original workspace variable to the new user selected value by
assignin('base','orig_var','new_var')
but because the new_var was created in the editbox, and i dont want the orig_var to update until i press a pushbutton, the value stored in new_var doesn't transfer over to the different callback.
How do I make it so I can call the new_var in a seperate callback?
I've managed to solve this now, thank you for the help
Hello Henry, I am having the same problem like yours. Could you please share, how you eventually managed?

Sign in to comment.

More Answers (2)

You can obtain the results created by your function simply by catching them as outputs:
Result = myfile;
This is completely the same as for calling sin(0.1), where you will store the results in an output also.
Any kind of remote controlled assignments of variables cannot compete with this clean and clear method.

4 Comments

how can I open a script file named incircle.m saved in this path : C:\Users\DOC\Desktop\Nouveau dossier\MinBoundSuite\incircle.m Thank you
run('C:\Users\DOC\Desktop\Nouveau dossier\MinBoundSuite\incircle.m')
This relies upon you being correct that this is a script and not a function . If it is a function then you should
addpath('C:\Users\DOC\Desktop\Nouveau dossier\MinBoundSuite');
result = incircle(....)
motevalizadeh comments
right
Your reply just made my day, thank you so much!

Sign in to comment.

Hi guys,
I am confronted with a similar problem. When I use run command in my GUI, it works well. But after I generated an exetutable program(exe), the run function report that the specified m file cannot be found. When I use a constant path to the run function. It reports that the m script cannot be executed. But the problem is that I can run it very well in guide. Are there anyone can help me?
Thanks a lot

2 Comments

In another post we discussed that run is not permitted in compiled executables. You indicated that you were able to eval instead
Yeah,
This is a previous question.

Sign in to comment.

Categories

Find more on Graphics Objects in Help Center and File Exchange

Products

Community Treasure Hunt

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

Start Hunting!