MATLAB指南处理回调和函数

时间:2014-01-26 21:34:16

标签: matlab matlab-guide

我有一个MATLAB指南项目。我在同一个.m文件中混合了常规函数和回调函数。

我在回调中调用函数,因为函数运行for循环,我希望更新字符串框。这是一个例子:

从回调(显示摘录)我调用此函数:

[color] = get_color(images, handles);
set(handles.ProcessImage, 'string', 'Processing Complete');

get_color函数位于同一个.m文件

function [color_corrections] = get_color(images, handles) 

[n, ~, ~, ~] = size(images); % Find the number of images

for imgIdx=1:n % For each image

    set(handles.ProcessImage, 'String', 'Processing Image #');

end
end

问题是handles.ProcessImagefor循环期间没有得到更新,但是当它从函数返回时会被写入'Processing Complete'

有什么想法吗?

谢谢, TommyMac

1 个答案:

答案 0 :(得分:1)

在一个紧凑的循环中,计算优先,因此Matlab最终不会再次更新GUI,直到它再次有时间,即一旦循环结束。您可以在更新字符串后调用drawnow强制执行GUI更新,如下所示:

set(handles.ProcessImage, 'String', 'Processing Image #');
drawnow; % force the new string to be rendered

如果循环中的代码很短但有很多次迭代,请注意 可以获得巨大的性能损失。如果迭代次数相对较少,但每次迭代需要很长时间,那么你就不应该注意到这种差异。