Azzera filtri
Azzera filtri

How do I pass a value out of a GUI when button is pressed? The value must be available to another m file

2 visualizzazioni (ultimi 30 giorni)
Hello,
I am making a GUI which adds rows to a matrix in one part. I want the matrix to be available to another m-file when I press another button (export). I've been looking at this for two weeks and can't figure it out. What is the syntax to make this matrix available to another function? eg x = function (y, exported_matrix). The normal [export_matrix] =Callback_pushbutton(....) doesn't work for GUI's. Can someone explain this? Sorry, this is probably basic but I can't see by any examples how this would work with my own GUI.
Thanks,
Brian

Risposta accettata

Brian
Brian il 25 Giu 2013
For reference to anyone with the same problem: Use global. It may or not be bad programming practivce but it works. global has to be stated in BOTH m files.
eg.
m-file 1
global BND_CDN
...
in m-file 2:
global BND_CDN
a = BND_CDN etc.

Più risposte (2)

Image Analyst
Image Analyst il 26 Mag 2013
  7 Commenti
Brian
Brian il 25 Giu 2013
Thanks for your time, I couldn't get it to work. I needed a simple answer, global did it, I didn't understand that global had to be in both files

Accedi per commentare.


Jan
Jan il 21 Giu 2013
Modificato: Jan il 21 Giu 2013
Assume your GUI has the tag-property 'MyGUI' (a more meaningful tag is recommended...). Then the store the matrix in the handles struct inside the GUI:
handles.matrix = rand(10, 10); % Or how ever you define the elements
guidata(hObject, handles); % 1st argument: handle of the current object
Now obtain the matrix from your external M-file:
function theExternalFunction
guiHandle = findobj(allchild(0), 'flat', 'tag', 'MyGUI');
guiHandles = guidata(guiHandle);
matrix = guiHandles.matrix;
...
guidata() is a wrapper for setappdata() and getappdata(). Some exceptions should be caught by tests, e.g. if the guiHandle cannot be found because the GUI has been closed before, etc.
  2 Commenti
Brian
Brian il 22 Giu 2013
Thanks for your help. I still can't work it though. The output when I press the button in the GUI seems to be working, the output with colons removed is:
handles =
figure1: 173.0012
pushbutton1: 174.0012
output: 173.0012
bnd: [100x5 double]
As testing, I copied your code and slightly changed it:
function theExternalFunction
guiHandle = findobj(allchild(0), 'flat', 'tag', 'test_2')
guiHandles = guidata(guiHandle)
BND_CDN = guiHandles.BND_CDN
The output in the command window is then
guiHandle =
Empty matrix: 0-by-1
Error using guidata (line 89)
H must be the handle to a figure or figure descendent.
Error in test_theExternalFunction (line 3)
guiHandles = guidata(guiHandle)
Should the guiHandle matrix be populated? Do you know what the problem is? Thanks again
Brian
Brian il 25 Giu 2013
Thanks for your time, I couldn't get it to work. I needed a simple answer, global did it, I didn't understand that global had to be in both files

Accedi per commentare.

Categorie

Scopri di più su Interactive Control and Callbacks in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by