Help to use Callback property in uicontrol

Hi,
I don't understand how works the 'Callback' property in uicontrol. For example, I create a pushbutton as
pb = uicontrol('Style', 'pushbutton', 'Callback', @fun);
as callback function I need simply an increment of a variable "i" initially i=0; in other words when I click in the pushbutton it should cause increment of "i" by one.
I tried with:
function fun(in)
in=in+1;
end
and so...
pb = uicontrol('Style', 'pushbutton', 'Callback', {@fun, i});
but it doesn't work. Some suggestions ?
Thanks

 Accepted Answer

Where is the variable stored? Callback functions take at least 2 inputs, always. Here is a simple demo, illustrating one way to do what you want. Note that I have made it step by step so you can take the semicolons off to see what is going on in the callback if needed.
function [] = demo_cb()
S.fh = figure('units','pixels',...
'position',[300 300 300 130],...
'menubar','none',...
'name','demo_cb',...
'numbertitle','off',...
'resize','off');
S.pb = uicontrol('style','push',...
'unit','pix',...
'position',[10 20 280 90],...
'string','I=1',...
'fontsize',14,...
'callback',@pb_call);
function [] = pb_call(H,E)
% Callback for pushbutton.
Str = get(H,'string');
Num = regexp(Str,'=','split');
NewNum = str2double(Num{2})+1;
set(H,'string',sprintf('I=%i',NewNum))

7 Comments

Thanks for help!
Who is E ?
Matt Fig
Matt Fig on 3 Nov 2012
Edited: Matt Fig on 3 Nov 2012
Like I said, all callbacks take at least two input arguments. The first one is the handle to the calling object, the second one is an eventdata structure that is seldom used. If you want to learn more about GUI making through examples like this, Check out this link:
Also, if your question has been answered, please select the answer.
one last question: how can I putout NewNum variable ?
There are very few types of callbacks that can return a value to the caller. You will need to use a different mechanism.
In your example the callback function is nested, is it? but it not return in the workspace.
In Matt's example the callback function is not nested.
Matt Fig
Matt Fig on 3 Nov 2012
Edited: Matt Fig on 3 Nov 2012
Sorry, I stepped away for a while. Walter is correct. The callback is a subfunction (or local function), not a nested function. I usually write GUIs with nested functions when I write them professionally, but using subfunctions is how most people first learn and in some cases it is simpler/preferred.
You can tell at a glance that there are no nested functions in that code because there are no END statements....

Sign in to comment.

More Answers (0)

Categories

Find more on Interactive Control and Callbacks in Help Center and File Exchange

Products

Asked:

on 3 Nov 2012

Community Treasure Hunt

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

Start Hunting!