2013-06-20 7 views
0

Другой вопрос GUIDE.Динамическое население всплывающего меню - MATLAB

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

Мой вопрос в том, как бы я мог динамически его заполнять с помощью функции create (или любой другой функции). Мне также нужно сделать то же самое с помощью 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'}) 

ответ

4

ГИД генерирует 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, сделанные вами изменения не будут отображаться.

+0

Спасибо, это работает отлично. Самое главное, спасибо за то, что я объяснил, что происходит! – msmf14