我有一个GUI我想添加一个popup menu。popup menu应显示的字段保存在文件targets.txt中。
当我打开我的程序时,我希望popup menu包含上面提到的文件中的行。
我这样做是因为我希望 popup menu 在程序中动态更改。由于它将包含用户在另一个字段中输入的目录路径,因此我将目录路径保存在一个文件中,并且每次用户输入一个文件夹时,我都会 popup menu 根据文件进行设置。(我做到了,效果很好)
由于function myFunction_OpeningFcn(hObject, eventdata, handles, varargin)仅在调用 的"create function"每个组件之后才被调用GUI,因此我无法在程序中进行初始化"opening function"。相反,我不得不这样做:
function databaseMenu_CreateFcn(hObject, eventdata, handles)
if ispc&&isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
handles.databaseMenuObject=hObject; % (1) see below
guidata(hObject, handles);
(1):我将弹出菜单对象保存在句柄中,以便在打开函数中使用它。
然后,在打开功能中,我可以这样做:
fid_r = fopen('targets.txt', 'r');
C = textscan(fid_r, '%s');
set(handles.databaseMenuObject,'String', C{1});
因此,当有人"database"在程序中添加新文件夹时,popup menu 更改(我将用户选择的文件夹添加到文件中,然后我将其设置为popup menu从文件中获取其字段(上面的函数)。所以它'看起来像这样:

我不喜欢我的代码设计,我不知道如何以不同的方式做到这一点,有没有办法让程序"create function"的被"popup menu"调用?还是有更好的方法来实现我的目标? "opening function"