使用目录文件填充弹出菜单

时间:2012-12-14 13:43:27

标签: matlab matlab-guide popupmenu

我正在尝试从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填充弹出菜单。

有什么想法吗?

提前致谢。

1 个答案:

答案 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);