Get values from callback function

4 views (last 30 days)
Felix Albrecht
Felix Albrecht on 4 Apr 2019
Commented: Jan on 5 Apr 2019
Hi,
I want to create a GUI with two checkboxes, but I don't how to get the values of my checkboxes from my callback function. After clicking on a pushbutton, the values of the checkboxes cbx1 and cbx2 are saved as logial values in val1 and val2. I want my main function to return val1 and val2; is there a way how to do this? I'm a very beginner with GUIs, so there's probably a much more elegant solution.
This is how my window looks like:
2019-04-04 15_27_55-.png
% Main function
function [val1,val2] = checkbox
% Create window:
Pix_SS = get(0,'screensize');
height = 100;
width = 220;
center = [(Pix_SS(3)-width)/2 (Pix_SS(4)-height)/2];
fig = uifigure('Position',[center width height]);
% Create check boxes:
cbx1 = uicheckbox(fig,'Text','Define Window?','Position',[55 70 120 15]);
cbx2 = uicheckbox(fig,'Text','Select Peaks?','Position',[55 40 120 15]);
% Create Pushbutton
btn = uibutton(fig,'Text','OK','Position',[55 10 102 20],...
'ButtonPushedFcn', @(btn,event) ButtonPushed(btn,cbx1,cbx2,fig));
end
% Callback function
function ButtonPushed(cbx1,cbx2,fig)
val1 = cbx1.Value;
val2 = cbx2.Value;
close(fig);
end
  2 Comments
Jan
Jan on 4 Apr 2019
Note: You cann the callback by
ButtonPushed(btn,cbx1,cbx2,fig)
but the function header is
ButtonPushed(cbx1,cbx2,fig) % 1st input missing
But the solution does not need the inputs of the callback.
Adam
Adam on 4 Apr 2019
You may also find
doc questdlg
or
doc uiconfirm
useful for simple UI-based things like this. I generally very quickly run into wanting to do something more than the very basic functionality they offer so write my own anyway, but they can handle all this for you for a simple 2-option question.
questdlg is the old version and uiconfirm uses the newer style uifigure, but since it is a standalone transient dialog either works fine here.

Sign in to comment.

Accepted Answer

Jan
Jan on 4 Apr 2019
Edited: Jan on 5 Apr 2019
Use uiwait and uiresume to wait for the pressing of the button:
...
% Create check boxes:
cbx1 = uicheckbox(fig,'Text','Define Window?','Position',[55 70 120 15]);
cbx2 = uicheckbox(fig,'Text','Select Peaks?','Position',[55 40 120 15]);
% Create Pushbutton
btn = uibutton(fig,'Text','OK','Position',[55 10 102 20],...
'ButtonPushedFcn', {@ButtonPushed, fig});
uiwait(fig);
if isgraphics(fig)
val1 = cbx1.Value;
val2 = cbx2.Value;
delete(fig); % Or: close()
else % Figure was deleted manually using the close icon:
val1 = NaN;
val2 = NaN;
end
end
function ButtonPushed(btn, EventData, fig)
uiresume(fig);
end
  2 Comments
Felix Albrecht
Felix Albrecht on 5 Apr 2019
Thanks! uiwait and uiresume works perfect for me.
As a note: I still have to hand over my figure to the callback function. Otherwise it doesn't work the way I want.
function [val1,val2] = checkbox
% Create window:
Pix_SS = get(0,'screensize');
height = 100;
width = 220;
center = [(Pix_SS(3)-width)/2 (Pix_SS(4)-height)/2];
fig = uifigure('Position',[center width height]);
% Create check boxes:
cbx1 = uicheckbox(fig,'Text','Define Window?','Position',[55 70 120 15]);
cbx2 = uicheckbox(fig,'Text','Select Peaks?','Position',[55 40 120 15]);
% Create Pushbutton
btn = uibutton(fig,'Text','OK','Position',[55 10 102 20],...
'ButtonPushedFcn', @(btn,event) ButtonPushed(fig));
uiwait(fig);
if isgraphics(fig)
val1 = cbx1.Value;
val2 = cbx2.Value;
delete(fig); % Or: close()
else % Figure was deleted manually using the close icon:
val1 = NaN;
val2 = NaN;
end
end
function ButtonPushed(fig)
uiresume(fig);
end
Jan
Jan on 5 Apr 2019
You are right: I've fixed the code and included the fig handle in the callback.

Sign in to comment.

More Answers (0)

Categories

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

Products


Release

R2017b

Community Treasure Hunt

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

Start Hunting!