Импорт значений из одного окна в другое в MATLAB GUI

Предположим, что у меня есть кнопка в окне, когда я нажимаю на нее, появляется новое окно. Я вызываю это окно (с именем My_New_Window) с таким синтаксисом:

My_New_Window();

Я хочу вставить некоторые значения в это новое окно из главного окна. Я знаю, что могу использовать setappdata или getappdata для этой цели, но есть ли другой способ? Например, такой синтаксис:

My_New_Window(Values);

Другой вопрос. Когда мы используем setappdata или getappdata, где MATLAB хранит эти данные? В оперативной памяти или на жестком диске?


person Eghbal    schedule 29.07.2014    source источник


Ответы (2)


  1. Да, вы можете использовать My_New_Window(Values); Например, в GUIDE любые параметры, которые вы передаете своему графическому интерфейсу, вы можете обрабатывать в OpeningFcn, используя его ввод varargin. Просто назначьте varargin своей структуре handles и используйте guidata(hObject, handles);.

  2. Относительно setappdata - согласно этой книги данные хранятся внутри "объекта". Поскольку объекты находятся в памяти, можно с уверенностью предположить, что они действительно хранятся в оперативной памяти.

person Dev-iL    schedule 29.07.2014
comment
Спасибо за ваш ответ. Я должен использовать guidata(hObject, handles); после чего-то вроде My_New_Window(Values); в главном окне. Это правда? - person Eghbal; 29.07.2014
comment
Процедура такова: 1) My_New_Window (значения); 2) (внутри My_New_Window_Opening_Fcn): handles.input=varargin и guidata(hObject, handles); 3) Если вам нужно получить доступ к этим данным из какого-то другого обратного вызова, просто используйте handles.input. Всякий раз, когда вы хотите обновить структуру дескрипторов и сохранить результат, вам нужно запустить guidata(hObject, handles) после этого. - person Dev-iL; 29.07.2014
comment
Если 'varargin' был списком значений, разделенных запятыми, что мне делать? - person Eghbal; 29.07.2014
comment
varargin — это просто массив ячеек. Вы получаете доступ к его элементам с помощью varargin{idx}. - person Dev-iL; 29.07.2014
comment
Конечно... Рад помочь. - person Dev-iL; 29.07.2014
comment
Другой вопрос, связанный с этим вопросом. Предположим, что теперь я хочу вернуть некоторые данные из My_New_Window в Main_Window с помощью обсуждаемого вами метода. Что я должен делать? - person Eghbal; 29.07.2014
comment
Обычно для этого следует использовать varargout, но, насколько я помню, с этим была связана одна трудность. Вот обсуждение этой темы, которое должно направить вас в правильном направлении: mathworks.com/ matlabcentral/newsreader/view_thread/145504 - person Dev-iL; 30.07.2014

Вы можете хранить данные в свойстве UserData GUI:

set(handletoFigure,'UserData',Values);

когда вы открываете другой графический интерфейс, вы получаете информацию:

Values = get(handletoFigure,'UserData);

Есть ли причина, по которой вы не хотите использовать setappdata/getappdata?

Что касается вашего второго вопроса, я не знаю, извините. Я думаю, что это оперативная память, хотя

person Benoit_11    schedule 29.07.2014
comment
Спасибо за быстрый ответ. Я только хочу знать другие альтернативные или, может быть, более быстрые методы для этого. Можем ли мы прекратить эту информацию, например, когда мы используем rmappdata ? В вашем методе эти данные действительны, когда мы закрываем главную страницу (предположим, что есть главное окно, из которого мы открываем главную страницу)? мы можем вызвать это из главного окна? - person Eghbal; 29.07.2014
comment
Да, это должно быть удалено с помощью rmappdata. Также данные не должны быть действительными, когда вы закроете свою основную фигуру, поскольку дескрипторы этой фигуры больше не будут существовать. Я предполагаю, что хранение данных приложения в корневом каталоге (например, setappdata(0,'DataName',Data)) является самым безопасным способом обеспечить доступ к своим данным при закрытии окон. - person Benoit_11; 29.07.2014