Мне нравится определять переменные (например, Appdata
) перед созданием объектов GUI. Не сразу нашел в сети следующие вопросы:
Общий вопрос 1) Что определяет порядок выполнения различных функций создания объектов
_CreateFcn
или все они выполняются параллельно?Общий вопрос 2)
OpeningFcn
запускается после создания объекта. Есть ли функция, которая запускается перед созданием объекта?Конкретный вопрос: моя цель - запомнить значения свойств графического интерфейса. Таким образом, после изменения свойств (например, с помощью обратных вызовов) и закрытия графического интерфейса он должен запомнить эти свойства после повторного запуска графического интерфейса. Если это первый запуск графического интерфейса или если все данные приложения были сброшены, следует использовать значения по умолчанию.
На данный момент (это работает) я определяю значения этих свойств для каждого отдельного _createFcn
(см. пример кода), но для 20+ функций создания это очень громоздко. Можно ли определить мои данные приложения по умолчанию перед созданием объекта, чтобы мне не нужно было так много циклов if? (см. пример кода 2)
пример кода 1 (текущая ситуация):
% --- Executes during object creation, after setting all properties.
function checkbox_res_mot_CreateFcn(hObject, eventdata, handles)
% hObject handle to checkbox_res_mot (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
if isappdata(0,'Simulation') %check if appdata exists
simulation = getappdata(0,'Simulation');
if any(strcmp(fieldnames(simulation),'residual_motions')) %check if variable exists
set(hObject,'Value',simulation.residual_motions); % stored value
else
set(hObject,'Value',0); % default value
end
else
set(hObject,'Value',0); % default value
end
simulation.residual_motions = get(hObject,'Value'); % create appdata
setappdata(0,'Simulation',simulation)
пример кода 2 (предложение):
%Executs before object creation
function default_values
if ~isappdata(0,'Simulation')
simulation.residual_motions = 0 % default values all in same function (only 1 variable shown as example)
setappdata(0,'Simulation',simulation) % create appdata
%% --- Executes during object creation, after setting all properties.
function checkbox_res_mot_CreateFcn(hObject, eventdata, handles)
% hObject handle to checkbox_res_mot (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
simulation = getappdata(0,'Simulation'); % no need to check appdata as it has already been created
set(hObject,'Value',simulation.residual_motions); % residual_motions has been created in 'default value' code or is saved from last GUI execution