Effacer les filtres
Effacer les filtres

How to update a "child" figure?

6 vues (au cours des 30 derniers jours)
Paul Kelly
Paul Kelly le 17 Jan 2012
I have a manually generated gui which consists of a parent figure with a number of child figures laid out on uipanels.
If I click something in one of the child figure I can cause something to happen in the parent figure using a figure handle passed to the child figure as an argument when I call the function that creates it.
Is there are way of triggering in the other direction, i.e. once the child has been created, if I click something in the parent figure how do I cause something to happen in the child figure?

Réponse acceptée

Sean de Wolski
Sean de Wolski le 17 Jan 2012
Save the handle to the child figure in appdata and set it as necessary:
setappdata(hParent,'hChild1',hChild);
On click:
hChild = getappdata(hParent,'hChild');
set(hChild,...)
  3 commentaires
Paul Kelly
Paul Kelly le 17 Jan 2012
sorry *right
Sean de Wolski
Sean de Wolski le 17 Jan 2012
Sure you can save the figure handle in appdata, that's what my above setappdata command did.
doc setappdata/doc getappdata for more info

Connectez-vous pour commenter.

Plus de réponses (1)

Paul Kelly
Paul Kelly le 18 Jan 2012
Thanks Sean, I understood your example but I missed some details.
For anyone who is interested, this is the example I created to check how to do it.
This is the parent GUI
function exampleParentGUI()
% Create the GUI parent
hParent = figure( ...
'Name', 'Parent', ...
'NumberTitle', 'off', ...
'Units', 'pixels', ...
'Position',[200 200 640 480], ...
'MenuBar', 'none', ...
'Resize', 'off');
% Place a button on the parent
uicontrol(hParent, ...
'Style', 'pushbutton', ...
'Units', 'pixels ', ...
'Position', [12, 12, 96, 24], ...
'String', 'Parent action', ...
'Callback', {@callback_ParentAction});
% Allocate an area for the child (normalised units)
childPos = [0 0.5 1 0.5];
createChildPanel(hParent, childPos)
% Grab the function handle for the child function
parentDoSomething = getappdata(hParent, 'childActionFn');
function callback_ParentAction(hObj, ~)
parentAct = ...
sprintf('Someone clicked the %s button\n', get(hObj, 'String'));
parentDoSomething(parentAct)
end
end
and this is the child
function createChildPanel(hParentArg, normalisedPos)
% Create panel
childPanel = uipanel(hParentArg, ...
'Units', 'normalized ', ...
'Position', normalisedPos, ...
'BackgroundColor', 'red');
% Place a button on the child panel
uicontrol(childPanel, ...
'Style', 'pushbutton', ...
'Units', 'pixels ', ...
'Position', [12, 12, 96, 24], ...
'String', 'Child action', ...
'Callback', {@callback_ChildAction});
% Place a static text
hText = uicontrol(childPanel, ...
'Style', 'text', ...
'Units', 'pixels ', ...
'Position', [120, 12, 96*5, 24], ...
'HorizontalAlignment', 'left', ...
'String', 'Nobody has done anything yet');
% Make childDoSomething available to the parent
setappdata(hParentArg, 'childActionFn', @childDoSomething);
function childDoSomething(childAct)
set(hText, 'String', childAct);
end
function callback_ChildAction(hObj, ~)
actStr = ...
sprintf('Someone clicked the %s button\n', get(hObj, 'String'));
childDoSomething(actStr)
end
end

Catégories

En savoir plus sur Migrate GUIDE Apps dans Help Center et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by