我有一个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.ProcessImage
在for
循环期间没有得到更新,但是当它从函数返回时会被写入'Processing Complete'
。
有什么想法吗?
谢谢, TommyMac
答案 0 :(得分:1)
在一个紧凑的循环中,计算优先,因此Matlab最终不会再次更新GUI,直到它再次有时间,即一旦循环结束。您可以在更新字符串后调用drawnow
强制执行GUI更新,如下所示:
set(handles.ProcessImage, 'String', 'Processing Image #');
drawnow; % force the new string to be rendered
如果循环中的代码很短但有很多次迭代,请注意 可以获得巨大的性能损失。如果迭代次数相对较少,但每次迭代需要很长时间,那么你就不应该注意到这种差异。