Мне нравится определять переменные (например, Appdata
) перед созданием объектов GUI. Я не мог найти в Интернете немедленно следующие вопросы:Определение значений по умолчанию для MATLAB GUI перед созданием объекта
Общие вопросы 1) Что определяет порядок выполнения функций создания другого объекта
_CreateFcn
или они все работают параллельно?Общий вопрос 2)
OpeningFcn
работает после создание объекта. Есть функция, которая работает до создание объекта?Конкретный вопрос: Моя цель - запомнить значения свойств графического интерфейса пользователя. Поэтому после того, как свойства были изменены (например, обратными вызовами), и графический интерфейс закрыт, он должен помнить эти свойства после запуска GUI снова. Если это первый раз, когда GUI запускается, или если все appdata были сброшены, он должен использовать значения по умолчанию.
На данный момент (это работает) я определяю эти значения свойств для каждого отдельного _createFcn
(см пример кода), но для 20+ создания функций очень громоздко. Можно ли определить мои приложения по умолчанию перед созданием объекта, чтобы мне не нужно было столько циклов? (См пример кода 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
Извините, за мой последний отзыв, но за ваш отзыв! Вы упомянули, что я могу использовать файлы .mat 'или рабочее пространство для хранения моей сессии графического интерфейса. Однако это не проблема, так как я сохранил все в 'appdata (0)'. Причина, по которой я хотел загрузить этот сеанс ** до создания объекта **, потому что каждый объект 'CreateFcn' использует эту информацию. Ваши 2 ответа на общие вопросы заставили меня понять, что будет более надежно удалить весь код из 'CreateFcn' и определить все во время' OpeningFcn'. Мне нужно выяснить, как работать с 'handles' первым, тогда я обновлю свою работу здесь! – Remco
Если я ошибаюсь, 'appdata' будет потерян после закрытия вашего графического интерфейса. Он предназначен для обмена данными между обратными вызовами, когда GUI жив. Если вам нужна информация, сгенерированная во время выполнения GUI, вам понадобятся постоянные средства, такие как сохранение данных в файле или переменной в рабочей области. – user3667217
В моем случае 'appdata' сохраняется до тех пор, пока сам Matlab открыт. Поэтому каждый раз, когда Matlab запускается в начале дня, он может использовать только значения по умолчанию, и это хорошо для меня. Может быть, я не использую 'appdata', поскольку он« предполагается »использоваться. Кажется, так удобно хранить все мои (глобальные) переменные в нем. – Remco