как передать параметры в графический файл Matlab - PullRequest
5 голосов
/ 18 марта 2011


Я новичок в Matlab.Работая через графический интерфейс Matlab, я столкнулся с проблемой, которая заключается в следующем:
. Я хочу иметь 2 файла рисунков, при этом один файл рисунка вызывает другой.я знаю, что просто вызывая имя 2-го фигового файла из первого фигового файла, мы можем вызвать 2-ую фигуру.Тем не менее, я также хочу отправить некоторые параметры из одного фигового файла в другой. Здесь мне нужно отправить аргументы, а также получить эти параметры для дальнейшей обработки. Я не смог найти решение этой проблемы.Я был бы рад, если бы кто-нибудь помог мне с этой проблемой.
Заранее благодарю

Ответы [ 4 ]

7 голосов
/ 18 марта 2011

Я нашел три способа сделать это:

Метод 1: Использовать setappdata и getappdata примерно так:

setappdata(0,'some_var',value)
some_other_var = getappdata(0,'some_var')

Вы будете использовать setappdata () в m-файле для fig1 для хранения любых данных, которые вы хотите передать, а затем вызывать getappdata () в другом m-файле для его получения.Аргумент 0 для двух функций указывает корневое рабочее пространство MATLAB, которое доступно вашей программе везде (т. Е. Оно является глобальным).Таким образом, когда вы закроете свои цифры, эти данные будут по-прежнему доступны.Вы можете использовать rmappdata для их удаления.

Метод 2: Использовать guidata:

Предполагая, что вы создали свой GUI с GUIDE, у вас есть доступ к структуре с именем handles, которая передается повсюду и которую вы можете редактировать, и вы можете сделать это с помощью обратного вызова GUI:

handles.some_var = some_value
guidata(hObject,handles)

Затем вы можете получить доступ к handles.some_var в другом месте с помощью другого обратного вызова (поскольку handles автоматически передается вам в него) в вашем другом m-файле:

some_other_var = get(handles.some_var)

Метод 3: Используйте UserData:

Сохраните нужную переменную из вашей первой цифры:

set(name_of_fig, 'UserData', some_var)

Затем, чтобы получить ее от другой:

some_other_var = get(name_of_fig, 'UserData')  

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

2 голосов
/ 08 мая 2012

Я бы сделал так (при условии, что вы используете GUI Builder GUIDE ).

Допустим, ваши цифры / m-файлы называются firstFigure.fig /m и secondFigure.fig / m .В коде firstFigure просто вызовите secondFigure и передайте свои параметры в качестве аргументов:

someNumber = 1;
someText = 'test';
aMatrix = rand(3);

secondFigure(someNumber, someText, aMatrix);

Аргументы будут доступны для secondFigure в качестве переменной varargin в функциях обратного вызова

function varargout = secondFigure(varargin) 

и

function secondFigure_OpeningFcn(hObject, eventdata, handles, varargin)

varagin - структура ячейки;используйте cell2mat и char , чтобы преобразовать его обратно:

theNumber = cell2mat(varargin(1));
theText = char(varargin(2));
theTextAgain = cell2mat(varargin(2));
theMatrix = cell2mat(varargin(3));
0 голосов
/ 08 мая 2012

Самый простой способ - обернуть параметры в массив ячеек и отправить их непосредственно в конструктор графического интерфейса. Вызов с двумя параметрами может выглядеть так:

figure2({param1, param2})

Затем вы можете распаковать аргументы в функции открытия (figure2_OpeningFcn) с кодом, подобным:

handles.par1 = varargin{1}{1};
handles.par2 = varargin{1}{2};

Эти строки должны быть расположены где-то перед строкой с надписью guidata(hObject, handles);. Затем вы можете получить доступ к handles.par1 и handles.par2 напрямую во всех других обратных вызовах.

Я предполагаю, что вы используете GUIDE для создания вашего GUI. Вы можете найти figure2_OpeningFcn в figure2.m, который будет находиться в том же каталоге, что и figure2.fig.

Примечание: вы также можете вернуть значения из фигуры, returnvalue = my_figure({my_input}). Если вы хотите получить инструкции по этому вопросу, оставьте комментарий, и я расширю свой ответ.

0 голосов
/ 27 января 2012
...