2017-09-13 81 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