我正在尝试从GUIDE组成的GUI中填充弹出菜单。我这样做:
TestFiles = dir([pwd '/test/*.txt']);
TestList = [];
for i = 1:length(TestFiles)
filename = TestFiles(i).name;
TestList = [TestList filename];
end
set(handles.popup_test,'string',TestList);
我在popup_test_CreateFcn
方法中这样做(我不确定那是不是正确的地方)。
尝试启动GUI时,我会继续这样做:
??? Attempt to reference field of non-structure array.
Error in ==> init>popup_test_CreateFcn at 101
set(handles.popup_test,'string',TestList);
Error in ==> gui_mainfcn at 96
feval(varargin{:});
Error in ==> init at 19
gui_mainfcn(gui_State, varargin{:});
Error in ==> @(hObject,eventdata)init('popup_test_CreateFcn',hObject,eventdata,guidata(hObject))
??? Error using ==> struct2handle
Error while evaluating uicontrol CreateFcn
因此,由于某种原因,set()
方法不允许我使用TestList填充弹出菜单。
有什么想法吗?
提前致谢。
答案 0 :(得分:1)
请注意,在运行程序时,首先调用的函数是"create functions"
因此,当您在set(handles.popup_test,'string',TestList);
内popup_test_CreateFcn
时,该函数不知道handles
是什么,因为它只在"opening function"
之后才知道。 (如果您尝试在"create functions"
内打印它将为空。
你可以在这个函数里面做这样的事情:
handles.popup_test=hObject; %pass handles the popup menu object
guidata(hObject, handles);
在开场功能XXXX_OpeningFcn(hObject, eventdata, handles, varargin)
中,您可以添加:
%...define TestList and other things you need
set(handles.popup_test,'string',TestList);