Azzera filtri
Azzera filtri

How to update a "child" figure?

6 visualizzazioni (ultimi 30 giorni)
Paul Kelly
Paul Kelly il 17 Gen 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?

Risposta accettata

Sean de Wolski
Sean de Wolski il 17 Gen 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 Commenti
Paul Kelly
Paul Kelly il 17 Gen 2012
sorry *right
Sean de Wolski
Sean de Wolski il 17 Gen 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

Accedi per commentare.

Più risposte (1)

Paul Kelly
Paul Kelly il 18 Gen 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

Categorie

Scopri di più su Migrate GUIDE Apps in Help Center e File Exchange

Tag

Community Treasure Hunt

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

Start Hunting!

Translated by