我有一个GUI,想要给它添加一个弹出菜单。应该显示的弹出菜单字段保存在文件targets.txt
中。
当我打开程序时,我希望弹出菜单包括上述文件中的行。我这样做是因为我想在程序中动态更改弹出菜单。由于它将包括用户在另一个字段中输入的目录路径,所以我将目录路径保存在文件中,每次用户进入一个文件夹时,我根据该文件设置弹出菜单。(我已经这样做了,它运行得很好)
function myFunction_OpeningFcn(hObject, eventdata, handles, varargin)
仅在调用"create function"
每个组件的函数之后才被调用,所以我无法在程序的"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): 我将弹出菜单对象保存在handles中,以便在打开函数中使用它。
然后,在打开函数中,我可以执行以下操作:
fid_r = fopen('targets.txt', 'r');
C = textscan(fid_r, '%s');
set(handles.databaseMenuObject,'String', C{1});
因此,当有人在程序中添加新的“ database”文件夹时,弹出菜单会更改(我将用户选择的文件夹添加到文件中,然后设置弹出菜单从文件中获取其字段(上面的函数)。因此它看起来像这样:
程序在用户输入两个文件夹后的样子
我不喜欢我的代码设计,并且我无法想出其他方法,是否有一种方法可以使“ popup菜单”的“ create function”在程序的“ opening function”之后被调用?还是有更好的方法来实现我的目标?