2017-09-13 1 views
0

zu speichern Ich weiß, dass mehrere Varianten dieses Problems an anderer Stelle besprochen wurden, aber ich bin immer noch nicht in der Lage, das Problem zu lösen. Bitte helfen Sie.nicht in der Lage, Variable in Matlab Gui

Ich habe eine Funktion als Teil einer größeren GUI erstellt, aber ich kann nicht drei Datenvariablen (AveX, AveY, AveZ) für die spätere Verwendung von Guidata (hObject, Griffe) speichern. Was mache ich falsch? Hier

ist die Funktion:

%call all checkbox values 
for i = 1:30 
checkboxes=get(handles.(sprintf('checkboxAv%d',i)),'value') 
Checkboxes(i,1)=checkboxes(1,1); 
end 

plotdata=handles.plotdata; 

[row,col] = find(Checkboxes==1) 


num=length(plotdata{1,1}(:,1)); 
DataY = zeros(num,length(row));%zero matrix 

%Average y data 
for k=1:length(row) 
    DataY(:,k)=plotdata{row(k,1),col(k,1)}(:,4); 
end 

[m,n] = size(DataY) 
if (n==1) 
    AveY=DataY' 
elseif (n>1)  
    AveY=mean(DataY'); 
end 
AveY=AveY'; 


%Average X data 
for kk=1:length(row) 
    DataX(:,kk)=plotdata{row(kk,1),col(kk,1)}(:,1); 
end 

test=DataX(:,1); 
comp=any(bsxfun(@minus,DataX,test),1) 
S = sum(comp) 
    if (S > 0) 
      h=msgbox(['Note! Wavelength index for the selected samples are not identical.']) 
    end 


[c,r] = size(DataY) 
if (r==1) 
    AveX=DataX' 
elseif (r>1)  
    AveX=mean(DataX'); 
end 
AveX=AveX'; 


%Average Z data 
for kkk=1:length(row) 
    DataZ(:,kkk)=plotdata{row(kkk,1),col(kkk,1)}(:,5); 
end 

[m,n] = size(DataZ) 
if (n==1) 
    AveZ=DataZ' 
elseif (n>1)  
    AveZ=mean(DataZ'); 
end 
AveZ=AveZ'; 

handles.Aveheader=Aveheader 
handles.AveX=AveX; 
handles.AveY=AveY; 
handles.AveZ=AveZ; 
guidata(hObject, handles); 

Und hier ist die Fehlermeldung:

Undefined function or variable 'hObject'. 

Error in CDanalyzer>AveragePlotFcn (line 5276) 
guidata(hObject, handles); 

Error in CDanalyzer>checkboxAv1_Callback (line 5076) 
AveragePlotFcn(handles) 

Error in gui_mainfcn (line 95) 
     feval(varargin{:}); 

Error in CDanalyzer (line 17) 
    gui_mainfcn(gui_State, varargin{:}); 

Error in 
matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)CDanalyzer('checkboxAv1_Callback',hObject,eventdata,guidata(hObject)) 
Error while evaluating UIControl Callback 
+0

Was soll 'hObject' sein? Hast du es in 'AveragePlotFcn' weitergegeben? –

+0

Hallo Jon. Hier enden meine Matlab-Fähigkeiten. Ich bin ein Neuling in Matlab GUI-Codierung. Der Grund, warum ich guidata (hObject, handles) verwende, ist, dass ich diese Befehlszeile verwendet habe, um Daten aus Drucktastenfunktionen zu speichern. Es könnte sein, dass ich falsch liege, aber zumindest hat es funktioniert. Aber nicht für meine "hausgemachte" Funktion. Ich möchte die Daten nur irgendwie speichern. –

+0

Welches Objekt möchten Sie mit dieser Zeile speichern? Gibt es einen Handle-Namen, den Sie in einer anderen Funktion eingegeben haben? Vielleicht versuchen Sie 'gcbo' anstelle von' hObject', wenn es sich um eine lokale Callback-Funktion handelt. –

Antwort

1

"guidata(object_handle,data) speichert die Variable data mit dem Objekt spezifiziert durch object_handle" Sie object_handle angeben müssen. Derzeit ist hObject in dieser lokalen Funktion nicht definiert.

Verwenden gcbo statt, die als "der Handgriff der Grafik gibt Objekt, dessen Rückruf ausführt":

guidata(hObject, handles); 

wird

guidata(gcbo, handles); 

Alternativ fügen hObject als Eingabe an die Funktion AveragePlotFcn. Also:

function AveragePlotFcn(hObject,~) 
... 
end