У меня есть 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"
программы? Или есть лучший способ достичь моей цели?