2013-03-14 3 views
1

Я пытаюсь найти способ для функции, которую я обозначил как «KeyPressFcn», чтобы вернуть значение.Функция «KeyPressFcn» для возврата значения

В настоящее время у меня есть:

figure('KeyPressFcn', @myFunc); 

Что хорошо, но мне нужно получить доступ к значению MyFunc возвращает

Есть ли способ сделать это?

Я закончил с http://www.mathworks.com/help/matlab/ref/figure_props.html#KeyPressFcn, но, глядя на примеры, которые они показывают, я все еще не понимаю, что происходит.

Пример они используют есть:

figure('KeyPressFcn', @(obj,evt)disp(evt)); 

И он говорит, что говорит функция передается в-структуру событий. Так почему же это не просто:

figure('KeyPressFcn', @disp(evt)); 

Какова значимость (OBJ, еф) точки перед именем функции?

Что такое evt? что такое obj? каково значение

+0

Я думаю, что самым быстрым (и самым уродливым) способом, вероятно, будет сохранение значения в глобальной переменной. –

ответ

2

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

Вы можете использовать их как это:

function myFunc(obj, evt) 
    a = 42; 
    setappdata(0, 'varName', a); 
end 

Вне обратного вызова:

otherVarName = getappdata(0, 'varName'); 

otherVarName будет иметь значение 42.


obj является объектом, выполняется обратный вызов. evt - это eventdata. GUIDE documentation говорит, что это:

hObject - Ручка объекта, например, компонент графического интерфейса пользователя, для которого обратный вызов был вызван. Для группы кнопок SelectionChangeFcn callback, hObject - это дескриптор выбранного переключателя или кнопка .

данныеСобытия - Последовательности событий, вызванных действиями пользователя, такие как таблицы выбора, испускаемых компонента в виде MATLAB структуры (или пустой матрицей для компонентов, которые не генерируют данныеСобытия)

Здесь hObject - obj и eventdata - evt.

Предположим, у вас есть блок редактирования, и вы хотите получить текст, который написал пользователь. Для этого вам нужен дескриптор editbox. Вот что дает вам hObject.

function buttonCallback(hObject, eventdata) 
    str = get(hObject, 'String'); 
end 
+0

Большое спасибо! – kbirk

Смежные вопросы