Мое желание состоит в том, чтобы пользователь выбирал данные, делал кучу вещей, а затем вызывал GUI, который кто-то написал (GUI3), и возвращал varA, varB и varC для рабочее пространство.Самый эффективный способ вызова нескольких графических интерфейсов в matlab
Сейчас у меня есть GUI1 что только кнопка для загрузки данных и содержит:
function varargout = GUI1_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.varA;
varargout{2} = handles.varB;
varargout{3} = handles.varC;
uiresume
close
function pushbutton1_Callback(hObject, eventdata, handles)
[filename, pathname] = uigetfile({'*.7';'*.m';'*.mat';'*.*'}, 'Select a .pfile');
pfilepath=fullfile(pathname,filename);
[handles.tempD,handles.tempE,handles.tempF] = functionF(pfilepath);
guidata(hObject, handles);
[varA,varB,varC]=GUI2(handles);
handles.varA=varA;
handles.varB=varB;
handles.varC=varC;
guidata(hObject,handles) ;
uiresume
GUI2 делает большую часть работы:
function GUI2_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
handles.tempD = varargin{1}.tempD;
handles.tempD = varargin{1}.tempE;
%%% does things with tempD and tempE and displays things...
guidata(hObject,handles)
uiwait
%%% other functions allow user to interact with data and create tempN
function varargout = GUI1_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.varA;
varargout{2} = handles.varB;
varargout{3} = handles.varC;
uiresume
function btnReady_Callback(hObject, ~, handles)
handles = guidata(hObject);
%%% does a bunch of stuff that eventually creates varA
[varB,varC]=GUI3(handles.tempD,handles.tempE,handles.tempN)
guidata(hObject, handles);
uiresume
И GUI3 делает кучу вещей внутри и затем отображает некоторые данные.
Прямо сейчас все графические интерфейсы остаются открытыми до тех пор, пока GUI3 не будет закрыт, после чего все они будут закрыты, а переменные перейдут в рабочее пространство. В идеале я хотел бы получить переменные в рабочей области, как только они будут рассчитаны, и позволить пользователю оставить GUI2 и GUI3 открытыми, если они захотят. Мне также хотелось бы, чтобы GUI1 закрывался, как только нажималась кнопка, но все же позволяла запускать все остальные.
Итак, мои вопросы: 1) Как мне получить varargout в рабочее пространство прямо перед закрытием GUI? 2) Как закрыть фигуру для графического интерфейса, но оставить ее для вызова других функций и GUIS? 3) Есть ли еще более эффективный способ комбинирования этих файлов .m, чтобы данные передавались более плавно, и мне меньше места, чтобы что-то испортить?
Кроме того, прямо сейчас оно возвращается и ошибка из файла btnReady_Callback от GUI2: H должен быть дескриптором фигуры или потомка фигуры.
Я так долго пытался понять правила этого, что я полностью смущен.
Благодарим Вас за понимание.Если я выберу uiwait и uiresume, это нарушит функциональность (в GUI 2 я покажу изображения, позвольте пользователю нарисовать ROIS, а затем сделать больше вычислений при нажатии кнопки)? GUI1 существует, потому что, когда я начал проект, я не знал достаточно о GUIS и мог строить GUI2 только с уже выбранными файлами. Функция, отличная от GUI для координации открытия и закрытия других GUIS, была бы идеальной. Есть ли сообщение или учебник, которые вы могли бы порекомендовать, чтобы объяснить, как это сделать? –
OK! Я мог бы сделать (1) с assignin (это также помогло: https://www.mathworks.com/matlabcentral/answers/7517-from-gui-to-workspace), поскольку я не забочусь о переписывании пользовательских переменных (2) Я удалил vargouts из GUI1_OutputFcn, чтобы его можно было вызывать без указания имен выходных переменных теперь, когда GUI2 использует assignin, и я помещаю delete (get (hObject, 'parent')); в GUI1 сразу после вызова GUI2, поэтому GUI1 закрывается. Да! –