Как передать параметры в графический файл Matlab


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

4 ответа

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

Способ 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 который передается везде и который вы можете редактировать, и вы можете сделать это в обратном вызове графического интерфейса:

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 не так уж и велики, но они помогают найти хорошие ресурсы, подобные этим и этим, и даже этим из официальных документов. То, что я здесь написал, может быть неверным, поэтому вам следует Обязательно обратитесь к документации для получения дополнительной помощи.)

Я хотел бы сделать это (при условии, что вы используете 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)

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

theNumber = cell2mat(varargin(1));
theText = char(varargin(2));
theTextAgain = cell2mat(varargin(2));
theMatrix = cell2mat(varargin(3));

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

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}), Если вы хотите инструкции по этому вопросу, оставьте комментарий, и я расширю свой ответ.

Другие вопросы по тегам