我创建了一个多窗口GUI,并且暂时将这个问题弄糊涂了:
我有两个按钮的主GUI窗口,这两个按钮通向另外两个GUI窗口。一个没有output_fcn
选项并正常关闭,但另一个GUI窗口有4个输出参数,我在子窗口中使用,问题是:
尝试引用非结构数组的字段。
当我试图关闭窗户时。 这里有一些代码:
function varargout = changeme_dialog1_OutputFcn(hObject, eventdata, handles)
varargout{1} = get(handles.varP1,'String');
varargout{2} = get(handles.varP2,'String');
varargout{3} = get(handles.varP3,'String');
varargout{4} = get(handles.varP4,'String');
错误首先出现在varargout{1}
中。
有什么问题?
答案 0 :(得分:0)
OutputFcn
时,handles
结构已被删除\清除,因此您会收到错误,因为您试图引用MATLAB甚至没有的内容识别为struct
。
我在appdata
期间OutputFcn
和storing中的输出retrieving {注意:没有什么能阻止您检索调用代码中的数据,但是如果你尊重范围这是一个更“正确”的方式来实现它IMO):
步骤1:点击“关闭窗口”按钮后,将输出保存到appdata:
function pushbutton1_Callback(hObject, eventdata, handles)
setappdata(0,'Output',{...
[handles.Hor1 handles.Ver1], [handles.Hor2 handles.Ver2]...
[handles.Hor3 handles.Ver3], [handles.Hor4 handles.Ver4]...
})
delete(handles.figure1); %// This actually initiates figure removal
(此处Hor1
... Ver4
只是句柄中的一些示例字段。在您的情况下,它将是get(handles.varP1,'String');
等。)
第2步:从appdata中追溯输出,clearing之后
function varargout = changeme_dialog1_OutputFcn(hObject, eventdata, handles)
...
varargout{1}=getappdata(0,'Output'); %// <== Wizardry Part 2
rmappdata(0,'Output') ;
...
我希望这有助于或至少指出你正确的方向。