2015-07-29 5 views
0

В GUIDE Matlab я пытаюсь динамически изменять текст всплывающего меню с заголовком файла данных, когда этот файл сначала выбирается с помощью кнопки select_data_button. Однако это дает мне ошибку, что group_variable_popupmenu является несуществующим полем.Ошибка MATLAB GUIDE: ссылка на несуществующее поле

Это сообщение может получить ответ на мой вопрос, но я не понимаю, что происходит: MATLAB GUI error Reference to non-existent field '---'

% --- Executes on button press in choose_data_button. 
function choose_data_button_Callback(hObject, eventdata, handles) 
    % hObject handle to choose_data_button (see GCBO) 
    % eventdata reserved - to be defined in a future version of MATLAB 
    % handles structure with handles and user data (see GUIDATA) 

    [filename, pathname] = uigetfile(...); 
    set(handles.patient_data_file, 'string', fullfile(pathname,filename)); 

    data = csvimport(fullfile(pathname, filename)); 
    %%%%% ERROR (Reference to non-existent field 'group_variable_popupmenu'.): 
    set(handles.group_variable_popupmenu, 'string', data(1,:)); 


% --- Executes on selection change in group_variable_popupmenu. 
function group_variable_popupmenu_Callback(hObject, eventdata, handles) 
    % hObject handle to group_variable_popupmenu (see GCBO) 
    % eventdata reserved - to be defined in a future version of MATLAB 
    % handles structure with handles and user data (see GUIDATA) 

% --- Executes during object creation, after setting all properties. 
function group_variable_popupmenu_CreateFcn(hObject, eventdata, handles) 
    % hObject handle to group_variable_popupmenu (see GCBO) 
    % eventdata reserved - to be defined in a future version of MATLAB 
    % handles empty - handles not created until after all CreateFcns called 

    if ispc && isequal(get(hObject,'BackgroundColor'),         
     get(0,'defaultUicontrolBackgroundColor')) 
     set(hObject,'BackgroundColor','white'); 
    end 

бы использовать GUIDATA вместо Get/Set быть лучшим вариантом? Новое для GUIDE и Matlab, поэтому любое объяснение было бы чрезвычайно полезно.

Редактировать - Полное сообщение об ошибке:

Reference to non-existent field 'group_variable_popupmenu'. 

Error in mockup>choose_data_button_Callback (line 148) 
set(handles.group_variable_popupmenu, 'string', data(1,:)); 

Error in gui_mainfcn (line 95) 
    feval(varargin{:}); 

Error in mockup (line 42) 
gui_mainfcn(gui_State, varargin{:}); 

Error in @(hObject,eventdata)mockup('choose_data_button_Callback',hObject,eventdata,guidata(hObject)) 

Error while evaluating UIControl Callback 
+0

С предоставленным кодом нет причин, по которым это не сработало. Вы вносили изменения в структуру ручек в другом месте в файле? Каково полное сообщение об ошибке? – excaza

+0

Не изменили структуру ручек, о которой я знаю. Только время, которое я использовал, это для gets/sets. – Nemophilia

+0

Время, чтобы узнать, как отлаживать. Используйте [отладчик MATLAB] (http://www.mathworks.com/help/matlab/matlab_prog/debugging-process-and-features.html#brqxeeu-177) и приостановите выполнение в строке, которая создает ошибку. Посмотрите имена полей в 'handles' и посмотрите, является ли' group_variable_popupmenu' одним из них. – excaza

ответ

0

У меня были некоторые вопросы, касающиеся этой ошибки в одном из моего кода в последнее время, а также, и я была такая же проблема, как вы, чтобы найти подходящий ответ, который я только найденный мной в конце.

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

Решение, которое я нашел, состояло в том, чтобы переместить создание моей фигуры внутри функции обратного вызова, а не снаружи.

Возможно, попробуйте сделать то же самое, перемещая свое всплывающее меню в начале вашей функции обратного вызова или что-то вдоль строк.

0

Это может быть тривиально, но вы используете графический интерфейс пользователя из руководства или окна команд? Одна ошибка, которую я делал много раз, сначала заключалась в том, чтобы просто дважды щелкнуть файл .fig в меню папок (который не вызывает конструктор) вместо того, чтобы вызывать его из окна команд, введя имя файла .fig (или через руководство, в качестве альтернативы).