Как передать переменную в функцию, созданную в руководстве - PullRequest
2 голосов
/ 01 апреля 2009

Я разработал графический интерфейс в MATLAB GUIDE. Каков наилучший способ сделать данные из внешней функции или класса доступными для функций, созданных GUIDE?

Ответы [ 2 ]

3 голосов
/ 01 апреля 2009

Ссылки, предоставленные ymihere , выглядят очень полезными. Кроме того, некоторые параметры (вложенные функции и использование GUIDATA ), обсуждаемые в этих ссылках, рассматриваются в другом посте по SO: Как создать графический интерфейс внутри функции в MATLAB? Там пара примеров того, как код выглядит для каждого случая.

Лично я неравнодушен к использованию вложенных функций, так как мне кажется, что в большинстве случаев он создает более короткий и чистый код. Тем не менее, это, вероятно, более сложный метод обмена данными приложения, если вы новичок в MATLAB (может потребоваться немного привыкнуть). Самым простым вариантом для вас может быть установка свойства «UserData» при вызове вашей функции (как предложено ymihere ). Если вы сохранили ваш GUIDE GUI на «myGUI.m», то вы бы позвонили:

>> hGUI = myGUI('UserData','hello');

где hGUI - дескриптор вашего объекта GUI. Затем вы можете получить свойство 'UserData', чтобы увидеть, что оно содержит строку 'hello':

>> get(hGUI,'UserData')

ans =

hello

Вместо «привет» вы можете поместить все, что захотите, например структуру данных. Вы должны иметь доступ к полю UserData на рисунке из обратных вызовов вашего m-файла GUIDE. Вам нужно будет получить дескриптор рисунка из аргумента handles , переданного вашим обратным вызовам.

РЕДАКТИРОВАТЬ: Один недостаток использования свойства 'UserData' или некоторых других методов, которые прикрепляют данные к объекту, заключается в том, что данные могут быть случайно (или преднамеренно) перезаписаны или иным образом повреждены пользователь или другие приложения. Преимущество использования вложенных функций для обмена данными между обратными вызовами GUI состоит в том, что он изолирует ваш код от всего, что может сделать пользователь или другое приложение. И наоборот, использование глобальных переменных может быть довольно опасным.

2 голосов
/ 01 апреля 2009

Я понятия не имею, что именно вы хотите сделать, но, возможно, вы захотите использовать свойство UserData фигуры:

Передача сомева при открытии формы myfig:

h = myfig('UserData', somevar);

или позже:

h = myfig();
[...]
set(h, 'UserData', somevar);

На рисунке вы можете получить доступ к собственности с помощью:

function some_Callback(hObject, eventdata, handles)
    somevar = get(hObject, 'UserData');

См. текст ссылки и текст ссылки

...