Как передавать данные из одного графического интерфейса в другой? Matlab

#matlab #user-interface

#matlab #пользовательский интерфейс

Вопрос:

Я использую вспомогательный графический интерфейс для открытия основного графического интерфейса. В вспомогательном графическом интерфейсе кнопка позволяет пользователю выбирать файлы данных, которые они хотели бы загрузить. Первый файл обрабатывается отдельно, а затем передается в основной графический интерфейс с помощью setappdata и getappdata . Вот код для кнопки в вспомогательном графическом интерфейсе:

 % --- Executes on button press in ManualMultiple.
function ManualMultiple_Callback(hObject, eventdata, handles)
% hObject    handle to ManualMultiple (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
[FileName,PathName,FilterIndex] = uigetfile('*.txt*','MultiSelect','on');
numfiles = size(FileName,2);
    setappdata(0,'files',numfiles)
FileData= cell(1,numfiles);
for ii = 1:numfiles
    FileName{ii};
    A=[];
    entirefile =fullfile(PathName,FileName{ii});
    fid = fopen(entirefile);
    tline = fgets(fid);
    while ischar(tline)
        parts = textscan(tline, '%f;');
        if numel(parts{1}) > 0
            A = [ A ; parts{:}' ];
        end
        tline = fgets(fid);
    end
    fclose(fid);
    FileData{ii} = A;

    A = FileData{ii};
    X1 = A(:,1);
    Y1 = A(:,5);
   DataToUse{ii} = [X1, Y1];
end

    FirstLoopX1Y1 = DataToUse{1};

    X = FirstLoopX1Y1(:,1);
    Y = FirstLoopX1Y1(:,2);
     setappdata(0,'XValue',X)
     setappdata(0,'YValue',Y)

    for i = 2:numfiles   
       OtherLoopsXY = DataToUse{i};
        X3 = OtherLoopsXY(:,1);
        Y3 = OtherLoopsXY(:,2);
        DataUseLater{i} = [X3,Y3]
    end
   setappdata(handles.ManualMultiple,'Data',DataUseLater)

GUImainwindow
  

Затем, когда я нажимаю кнопку в главном графическом интерфейсе, я должен получить данные, отправленные из подсистемы, для предварительных вычислений по этим данным. Вот код:

 % --- Executes on button press in CalculateIntensity.
function CalculateIntensity_Callback(hObject, eventdata, handles)
% hObject    handle to CalculateIntensity (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% Trapz function
starting_value = getappdata(0,'StartValue');
ending_value = getappdata(0,'EndValue');
StartingValue = str2num(starting_value);
EndingValue = str2num(ending_value);

A = getappdata(0,'XYarray');
 %line 122 and 123 finds location of data in the entire spectrum
[~,indx1]=ismember(StartingValue,A,'rows');
[~,indx2]=ismember(EndingValue,A,'rows');
arrayfortrapz = A(indx1:indx2,1:2);
setappdata(0,'arraytapz',arrayfortrapz);
[value,index] = max(arrayfortrapz(:,2)); %finds max intensity / peak value
PeakValue = arrayfortrapz(index,1);
handles.Peak_Value = PeakValue;
guidata(hObject,handles);

X1 = arrayfortrapz(1:end,1);
Y1 = arrayfortrapz(1:end,2);
 AUC = trapz(X1,Y1); %intergration
 str = num2str(AUC);
 [s,v] = listdlg('PromptString','Calculated Intensity:','SelectionMode','single','ListString',str,'ListSize',[200 200]);
 IntensityValue = str(s,:);
 setappdata(0,'IV',IntensityValue);

 DataUseLater = getappdata(handles.ManualMultiple,'Data')
  

Но когда я нажимаю эту кнопку в главном графическом интерфейсе, я получаю ошибки:

 Reference to non-existent field 'ManualMultiple'.

Error in MichelleLaycockGUImainwindow>CalculateIntensity_Callback (line 207)
 DataUseLater = getappdata(handles.ManualMultiple,'Data')
  

Может кто-нибудь сказать мне, как я мог бы решить эту проблему или даже помочь мне понять, где я ошибаюсь? Заранее спасибо

Ответ №1:

Что, если вы добавите guidata(hObject, handles) после этой строки:

setappdata(handles.ManualMultiple,'Data',DataUseLater) в вашем главном окне? Похоже, что структура дескрипторов не обновлялась после создания дескрипторов.ManualMultiple

Комментарии:

1. Спасибо за вашу помощь, но нет, это не помогло, я получил ту же ошибку, что и раньше.