2017-09-13 112 views
0

我知道這個問題的幾個變體已經在別處討論過了,但我仍然無法解決問題。請幫忙。無法在Matlab中存儲變量Gui

我已經創建了一個函數作爲較大的gui的一部分,但我無法存儲三個數據變量(AveX,AveY,AveZ)供guidata(hObject,句柄)稍後使用。 我在做什麼錯?

下面是函數:

%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); 

這裏是錯誤消息:

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

什麼是'hObject'應該是?你把它傳遞給'AveragePlotFcn'嗎? – 2017-09-13 18:49:43

+0

嗨,喬恩。這是我的matlab技能​​結束的地方。我是matlab GUI編程的新手。我使用guidata(hObject,句柄)的原因是我使用這個命令行來存儲按鈕功能的數據。這可能是我錯了,但至少它工作。但不適合我的「自制」功能。我只是想以某種方式存儲數據。 –

+0

那麼你試圖用那條線保存哪個對象?在另一個函數中是否有句柄名稱?如果這是一個本地回調函數,可以試試'gcbo'而不是'hObject'。 – 2017-09-13 19:18:51

回答

1

guidata(object_handle,data)存儲變量dataobject_handle指定的對象」,你需要指定object_handle。目前hObject在本地函數中未定義。

使用gcbo來代替,該 「返回圖形的手柄對象,其回調正在執行」:

guidata(hObject, handles); 

變得

guidata(gcbo, handles); 

備選地,添加hObject作爲輸入到功能AveragePlotFcn。所以:

function AveragePlotFcn(hObject,~) 
... 
end