когда команда guidata действительно обновляет данные? - PullRequest
1 голос
/ 23 августа 2011

теперь у меня есть два графических интерфейса.Один называется Main, а другой - Sub.

Sub вызывается из Main, и в нем я хочу сделать некоторые обновления данных Main.

Так что в Sub я использую

mainGUI = guidata(Main)
set(mainGUI.Button,'Enable','on') %% originally it is off
gudata(Main,mainGUI)

тогда Sub закрывается и мы возвращаемся в Main.Однако маркеры Main не менялись, пока вы дважды не открыли и не закрыли Sub.


Идея программы:

сначала у вас есть Main, которая позволяет вам только щелкнутьодна кнопка (открыть Sub, интерфейс выбора файлов), затем после того, как вы правильно выбрали и импортировали данные в Sub, когда вы вернетесь в Main, он автоматически активирует соответствующие кнопки (которые были отключены ранее).

Любые комментарииДобро пожаловатьЗаранее спасибо.

1 Ответ

1 голос
/ 23 августа 2011

Возможно, я не до конца понимаю ваш вопрос (см. Мой комментарий), но я сделал пример кода, который работает так, как вы, вероятно, ожидаете.

Я думаю, что вам не хватает части, которую вам нужно передатьОсновная фигура дескриптора к вашему sub GUI для того, чтобы данные были доступны.Насколько я понимаю, данные хранятся с помощью guidata в графической среде, и поэтому вам необходимо знать дескриптор фигуры, чтобы иметь возможность доступа к ее сохраненным графическим данным.

Вот оно:

Основной графический интерфейс

% GUI
function so_multiguiA
% Layout
figure('units','normalized','position',[0.2 0.2 0.3 0.3],'tag','figure');
datamain=guihandles(gcf);
uicontrol('style','pushbutton','string','Click me', ... 
    'parent',datamain.figure,'units','normalized', ... 
    'Position',[0.2 0.2 0.6 0.6],'tag','button', ... 
    'callback',@buttonmain_callback);
datamain=guihandles(gcf); 
% Data
guidata(gcf,datamain);
end
% Callback
function buttonmain_callback(obj,event)%#ok
so_multiguiB(gcbf);
end

Вспомогательный графический интерфейс

% GUI
function so_multiguiB(mainhandle)
% Layout
figure('units','normalized','position',[0.5 0.5 0.3 0.3],'tag','figure');
datasub=guihandles(gcf);
uicontrol('style','pushbutton','string','Disable main button', ... 
    'parent',datasub.figure,'units','normalized', ... 
    'Position',[0.2 0.2 0.6 0.6],'tag','button', ... 
    'callback',@buttonsub_callback);
datasub=guihandles(gcf); 
% Data
datasub.mainhandle=mainhandle;
guidata(gcf,datasub);
end
% Callback
function buttonsub_callback(obj,event)%#ok
datasub=guidata(gcbf);
datamain=guidata(datasub.mainhandle);
set(datamain.button,'enable','off');
end

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...