Get values from callback function

4 visualizaciones (últimos 30 días)
Felix Albrecht
Felix Albrecht el 4 de Abr. de 2019
Comentada: Jan el 5 de Abr. de 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 comentarios
Jan
Jan el 4 de Abr. de 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 el 4 de Abr. de 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.

Iniciar sesión para comentar.

Respuesta aceptada

Jan
Jan el 4 de Abr. de 2019
Editada: Jan el 5 de Abr. de 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 comentarios
Felix Albrecht
Felix Albrecht el 5 de Abr. de 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 el 5 de Abr. de 2019
You are right: I've fixed the code and included the fig handle in the callback.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Interactive Control and Callbacks en Help Center y File Exchange.

Productos


Versión

R2017b

Community Treasure Hunt

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

Start Hunting!

Translated by