Get values from callback function

6 Ansichten (letzte 30 Tage)
Felix Albrecht
Felix Albrecht am 4 Apr. 2019
Kommentiert: Jan am 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 Kommentare
Jan
Jan am 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 am 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.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Jan
Jan am 4 Apr. 2019
Bearbeitet: Jan am 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 Kommentare
Felix Albrecht
Felix Albrecht am 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 am 5 Apr. 2019
You are right: I've fixed the code and included the fig handle in the callback.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Interactive Control and Callbacks finden Sie in Help Center und File Exchange

Produkte


Version

R2017b

Community Treasure Hunt

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

Start Hunting!

Translated by