我用这种结构构建了一个图像浏览器(伪代码)
function myBrowser()
loadFirstImage();
uiwait;
function handleKeyPress(~,event)
if ~(isempty(event.Character))
if(strcmp(event.Key, 'uparrow'))
%show next image
end
... %other key calls
if(strcmp(event.Key, 'r'))
generateIndividualReportData()
end
end
end
end
有了这个,我可以浏览文件夹中的图像,对它们进行一些操作,并且在某些时候我需要生成一个报告,为此我按下“r”键来调用generateIndividualReportData()函数。
在我在generateIndividualReportData()中添加了一个“uigetdir”调用之前,这非常有效
function generateIndividualReportData() %this breaks
% do things
mydir= uigetdir(pwd, 'Choose directory where X stuff is');
addpath(mydir);
end
此 uigetdir 实际上从未被调用,因此后续的“addpath”调用会生成此错误:
Error using catdirs (line 24)
All arguments must be strings.
Error in addpath (line 64)
p = catdirs(varargin{1:n});
Error in generateIndividualReportData (line 75)
addpath(mydir);
但是,如果我在 'uitgetdir' 调用之前暂停执行,它就像一个魅力。
function generateIndividualReportData() %this works
% do things
pause(1)
mydir= uigetdir(pwd, 'Choose directory where X stuff is');
addpath(mydir);
end
我知道这是一个简单/不那么肮脏的解决方案,但我想知道为什么会这样。
提前致谢。