Ошибка при использовании delete() MATLAB GUI

Я получаю такую ​​ошибку, когда нажимаю "X", чтобы закрыть всплывающее окно.

Вот ошибка, которую я получаю:

Undefined function or variable 'PopupWindow'.

Error while evaluating UIControl Callback

Вот код, который я использую:

function PopupWindow = alertBox(figg,position,showtext,titlebar);

    PopupWindow = uipanel('Parent',figg,'Units','pixels','Position',position,...
            'BackGroundColor',CYAN,'BorderType','beveledout','ButtonDownFcn','','Visible','on');

    uicontrol('Parent',PopupWindow,'Units','pixels','Style','PushButton','String','X',...
                    'Position',[position(3)-margin+1 position(4)-margin+1 margin-2 margin-2],'Callback',...
                    ['delete(PopupWindow);']); 

1 ответ

Решение

Вы определили свой обратный вызов как символьный вектор, который MATLAB оценивает в базовой рабочей области, где PopupWindow не определено. Вместо этого вы можете использовать анонимную функцию в качестве обратного вызова.

Например:

fig = figure();
a = uicontrol('Parent', fig, 'Style', 'Pushbutton', 'Units', 'Normalized', ...
              'Position', [0.1 0.1 0.8 0.8], 'String', 'Delete Figure', ...
              'Callback', @(h,e)delete(fig));

Дает нам окно с рисунком, которое закрывается при нажатии кнопки:

ура

Обратите внимание, что я определил анонимную функцию, чтобы принимать и отбрасывать два ввода. Это связано с тем, что обратные вызовы графического объекта по умолчанию принимают 2 входа: дескриптор объекта, для которого выполняется обратный вызов, и структуру данных события. В этом простом случае мы не нуждаемся ни в одном, но во многих ситуациях эта информация будет сохранена (например, данные события для обратного вызова при нажатии кнопки).

Другие вопросы по тегам