Динамическое заполнение всплывающего меню

Еще один вопрос GUIDE.

Я создал фигуру GUIDE с всплывающим меню. Элементы меню определяются динамически при вызове рисунка. Пример: следует вызвать myGUI(data, popupNames), а затем строки, включенные в popupNames, следует использовать для маркировки вариантов. Я могу сделать это в обратном вызове для всплывающего меню. Однако это означает, что всплывающее окно не будет заполнено до тех пор, пока я не нажму во всплывающем меню и не выберу первый (в настоящее время пустой) вариант.

Мой вопрос заключается в том, как я могу динамически заполнять его с помощью функции создания (или любой другой функции). Мне также нужно сделать то же самое с uitable (заполнить имена строк и столбцов, хотя это не является динамическим)

Моя неудачная попытка, которая привела меня к пониманию того, что я не могу получить доступ к данным дескриптора в функциях создания, была следующей:

% --- Executes during object creation, after setting all properties.
function popupmenu1_CreateFcn(hObject, eventdata, handles)
handles.popupNames = varargin{2};
set(hObject, 'String', {handles.popupNames{1:end}});

% --- Executes during object creation, after setting all properties.
function uitable1_CreateFcn(hObject, eventdata, handles)

handles.data = varargin{1};

t = uitable(handles.uitable1);
set(t,'Data',handles.data{1})
set(t, 'ColumnName', {'a', 'b', 'c'})
set(t,'RowName', {'1', '2', '3'})

person msmf14    schedule 20.06.2013    source источник


Ответы (1)


GUIDE создает файл myGui_OpeningFcn(hObject, eventdata, handles, varargin). Там вы можете инициализировать свои строки:

function myGui_OpeningFcn(hObject, eventdata, handles, varargin)

    handles.output = hObject;

    set(handles.popupmenu1, 'String', varargin{2});

    set(handles.uitable1, 'Data', varargin{1});
    set(handles.uitable1, 'ColumnName', {'a' 'b' 'c'});
    set(handles.uitable1, 'RowName', {'1' '2' '3'});

    guidata(hObject, handles);
end

Обратите внимание на использование guidata, который обновляет структуру дескриптора для графического интерфейса с помощью новый handles. Если вы не будете вызывать guidata всякий раз, когда изменяете структуру handles, сделанные вами изменения не будут отражены.

person Dang Khoa    schedule 20.06.2013
comment
Спасибо, это работает отлично. Самое главное спасибо за четкое объяснение того, что происходит! - person msmf14; 20.06.2013