How to retrieve the output from callback function?
Mostra commenti meno recenti
I have designed a pushbutton on a MATLAB figure and written a callback function, while the function runs without any error, it does not produce any output. May I know how to retrieve the output from the callback function. Here is my code :
The screen :
f=figure('Position',[10 100 1500 700]);
pb1 = uicontrol(f,'Style','pushbutton','String','Slice# in yz plane',...
'Position',[1425 600 100 50],...
'callback',@(src,eventdata)pb1_callback(slice_numx));
The callback function :
function[slice_num] = pb1_callback(src,eventdata)
prompt={'Enter the Slice Number'};
slicenum = inputdlg(prompt);
slice_num = str2double(slicenum);
When I press the pusbutton 'pb1', it gives a popup window wherein I input the number. Issue is that I am not able to find this entered number in my main program. I am sure there is some issue with defining it in main program. Any help will be upvoted.
Cheers,
Guru
2 Commenti
jupiter
il 19 Dic 2016
Adam
il 19 Dic 2016
What is samplemag?
@(src,eventdata,samplemag)pb1_callback
tells the code that when pb1_Callback is called it expects the caller to give it those 3 arguments, all of which will then be ignored.
@(src,eventdata)pb1_callback( samplemag )
with a function definition of
function pb1_callback(samplemag)
is likely what you want, unless you also want src or eventdata in which case pass them in the final brackets of the callback definition too.
In terms of the original question you can achieve the equivalent of this either by using nested functions or by passing an object of a handle-derived class into your callback.
Risposta accettata
Più risposte (2)
Henry Giddens
il 16 Dic 2016
Hi,
You will have to store the answer as a property or else if is will be lost when the callback function finishes executing. There are a number of ways to do this. You can store it in the figures UserData Property:
%At the end of the callback function:
src.Parent.UserData = slice_num;
%When you want to retrieve it from somewhere else:
slice_num = f.UserData;
You can also use setappdata and getappdata, to pass data between various callback functions.
Lavi Sekundo
il 20 Feb 2018
I just realized this one (e.g.)
fig.CheckBox.ValueChangedFcn='outVar=myFunction(inVar);';
when you execute the callback by selecting/un-selecting a CheckBox in the GUI, you are in fact executing whatever is in the quotes. Just define your function as you would do anyway
function outVar=myFunction(inVar)
outVar=inVar
2 Commenti
Stephen23
il 20 Feb 2018
The MATLAB documentation states "Defining a callback as a character vector is not recommended", and recommends using function handles.
Summary: Avoid using a char vector, always use a function handle: they are more flexible, and much more reliable.
Jan
il 20 Feb 2018
@Lavi: This is a bad idea. The string is evaluated in the base workspace and this can have all evil side-effects as other eval calls. E.g. redefine "myFunction" as a variable in the command window and afterwards your callback crash. It will be very hard to debug such remote effects.
Categorie
Scopri di più su Interactive Control and Callbacks in Centro assistenza e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!