1

我用这种结构构建了一个图像浏览器(伪代码)

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

我知道这是一个简单/不那么肮脏的解决方案,但我想知道为什么会这样。

提前致谢。

4

0 回答 0