Matlab: получение значения дескриптора GUI из функции обратного вызова при вызове другой функцией

Я новичок в программировании графического интерфейса для MATLAB, поэтому мой вопрос относится к этому.

Допустим, я создаю графический интерфейс с помощью GUIDE. В функции создания

MyGUI_OpeningFcn(hObject, eventdata, handles, varargin)

Я вызываю другую функцию,

SamplingRate_Callback(handles.SamplingRate, eventdata, handles)

определяется как

function SamplingRate_Callback(hObject, eventdata, handles)

SamplingRate_Callback устанавливает несколько переменных,

handles.a = 1;
handles.b = 2;
handles.c = 3;

Структура handles правильно обновляется в функции SamplingRate_Callback. Проблема, с которой я сталкиваюсь, заключается в том, что если я не изменю функцию на

function handles = SamplingRate_Callback(hObject, eventdata, handles),

Я не могу вернуть данные вызывающей функции MyGUI_OpeningFcn. Я пробовал использовать guidata(gcf, handles) и guidata(hObject, handles), но ни один из них не работает.

Не могли бы вы пролить свет на эту проблему?

Кроме того, я не уверен, когда использовать guidata(gcf, handles) против guidata(hObject, handles).

Спасибо за вашу помощь!


person user1340654    schedule 18.04.2012    source источник


Ответы (2)


Как вы вызываете SamplingRate_Callback в своей функции MyGUI_OpeningFcn? Мне кажется, что вы не определили возвращаемые значения, которые в данном случае будут values.

Исправление будет примерно таким:

function [handles] = SamplingRate_Callback(hObject, eventdata, handles)

И тогда вы вызовете SamplingRate_Callback из MyGUI_OpeningFcn следующим образом:

handles = SamplingRate_Callback(handles.SamplingRate, eventdata, handles);
person nrz    schedule 18.04.2012
comment
Привет нрз, спасибо за ваш ответ. Да, это сработает. Думаю, я не понимаю, почему, когда SamplingRate_Callback вызывается напрямую с помощью его элемента GUI, вы можете просто сохранить постоянные значения дескриптора с помощью guidata, но если вы вызываете ту же функцию другим способом, guidata не работает. Имеет ли это смысл? Ты знаешь почему? - person user1340654; 19.04.2012

В зависимости от того, что вы подразумеваете под данными, вы можете использовать getappdata и setappdata для сохранения и загрузки данных в/из самого объекта (я обычно использую оси, по которым данные будут нарисовано).

person Keegan Keplinger    schedule 22.05.2012