Can you program a figure to execute the same callback after each child's callback?
Información
La pregunta está cerrada. Vuélvala a abrir para editarla o responderla.
Mostrar comentarios más antiguos
Essentially, I'd like a callback that is for the figure and all of it's children, but is executed last. Of course, you could manually enter this code for every single callback, but perhaps there is a more elegant way?
fh = figure()
button1 = uicontrol('Parent', fh, 'Callback', button1_Callback)
button1 = uicontrol('Parent', fh, 'Callback', button2_Callback)
%...
buttonN = uicontrol('Parent', fh, 'Callback', buttonN_Callback)
function button1_callback(hObject, eventD, fh)
% Do stuff specific to this object.
% Perform this action (***I don't want to type this for every single callback***)
fh_callback(fh, eventD, fh); % Example.
end
function button2_Callback(hObject, eventD, fh)
% Do stuff specific to this object.
% Perform this action (***I don't want to type this for every single callback***)
fh_callback(fh, eventD, fh); % Example.
end
%...
function buttonN_Callback(hObject, eventD, fh)
% Do stuff specific to this object.
% Perform this action (***I don't want to type this for every single callback***)
fh_callback(fh, eventD, fh); % Example.
end
6 comentarios
Walter Roberson
el 11 de Jul. de 2019
At the moment it looks as if you could set all of the callbacks to
@(hObject, event) fh_callback(hObject, event, guidata(hObject))
Instead of using a different one for each?
Walter Roberson
el 11 de Jul. de 2019
Also I wonder if a uibuttongroup would make sense for you?
Dominik Mattioli
el 11 de Jul. de 2019
Walter Roberson
el 11 de Jul. de 2019
set(ancestor(hObject, 'figure'), 'currentobject', ancestor(hObject, 'figure'))
But I would just add a function call at the end of each of the callbacks to do this work.
Another approach is
hObject.Enable='disable'
hObject.Enable='on'
That is, disable an object removes its focus.
You could also add a figure window button down callback: that should fire after the individual callback.
Dominik Mattioli
el 11 de Jul. de 2019
Walter Roberson
el 11 de Jul. de 2019
You might need to play with PickableParts
Respuestas (1)
Steven Lord
el 11 de Jul. de 2019
0 votos
Are you setting the figure object's CurrentObject property back to the figure object itself because your callbacks query the CurrentObject to determine what component to query or modify? That could be dangerous -- all it would take would be the user clicking in the wrong place at the wrong time to potentially break your UI by making the CurrentObject not what your callbacks expect it to be.
Instead, I would store the handles of the components in your UI and share the stored handles among the callbacks. That way you don't need to care what the current CurrentObject is, you can refer to either the object whose callback is currently executing (the first input to the callback function) or to a specific object whose handle is in the shared data.
1 comentario
Dominik Mattioli
el 11 de Jul. de 2019
Editada: Dominik Mattioli
el 11 de Jul. de 2019
La pregunta está cerrada.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!