Matlab: генерация выходной переменной функции с вводом графического интерфейса

Одна из функций программного пакета, который я поддерживаю, состоит в том, чтобы преобразовывать сокращенное название продукта, данное пользователем, в его полное имя. Программное обеспечение пытается сделать это автоматически двумя способами, прежде чем вернуться к пользовательскому вводу. Если автоматические попытки терпят неудачу, пользователю предлагается сопоставить с таблицей.

Часть GUI довольно велика, поэтому она поддерживается в отдельной подфункции. Подфункция вернет только переменную idx или индекс. У меня возникают трудности с тем, что Matlab достаточно «терпелив», чтобы дождаться, пока графический интерфейс укажет idx.

Вот важные части кода с комментариями:

function [ idx ] = mnmhelper( modeldb )
%mnmhelper makes a UI table for the user to manually select the correct
%model

%% uitable generation

f = figure('UserData',1); %userdata will be the selection;
t = uitable('Parent',f,...
    'Data',modeldb.Model,...
    'CellSelectionCallback',@select_callback);
b = uicontrol('Parent', f,...
    'Style','pushbutton',...
    'String','Commit Model Name',...
    'Callback',@button_callback);

%% callbacks - note that these are nested in the parent fnc

    function select_callback(hObject , eventdata)
        %hObject - handle to uitable
        %eventdata - currently selected table indexes

        f.UserData = eventdata.Indices; % pass selection as userdata array: [row,col]
    end

    function button_callback(hObject,eventdata,selection)
        idx = f.UserData(1);
        close(f);
        figclosed = 1; %see additional notes below code on this line
    end
end

Проблема в том, что Matlab выдаст ошибку, что idx не был определен, потому что он не дождался использования фигуры.

Я попытался добавить раздел:

%% strongarm matlab into waiting for user to do this

figclosed = 0;
while figclosed < 1 %don't evaluate to command line until figure is finished
    % ... do nothing 
    % once this evaluates to ==1 and kicks out of this, idx is defined
end

после всех обратных вызовов, но Matlab будет ждать в цикле while, и фигура не будет сгенерирована. Как заставить Matlab ждать?

Нужен ли мне CreateFcn для f, который заставляет Matlab ждать или что-то в этом роде?


person Brandon Dube    schedule 02.01.2016    source источник


Ответы (1)


Функция uiwait существует именно для этой цели. Просто вызовите uiwait(f), чтобы Matlab дождался завершения работы графического интерфейса.

См. документ: uiwait.

person Brandon Dube    schedule 02.01.2016