禁用进度条 Matlab

Disable progress bar Matlab

我正在使用由大量嵌套函数组成的 Matlab 代码。大量的这些函数显示progressbars。是否有任何 Matlab 命令或任何可能禁用 progressbars 显示,而不必定位和 comment/remove 调用它们的所有行?

根据您的评论,我假设您的意思是您有很多调用 waitbar 的函数。

您可以使用自己的 waitbar.m 重载 'waitbar' 函数,确保其在搜索路径上的位置更高。虽然这通常不是一个好主意,并且将来当您(或您使用您的代码的任何其他人)确实想要使用等待栏但它没有出现时可能会导致问题。

另一种(在我看来更可取)禁用它的方法是创建您自己的中间函数,您可以在其中切换 on/off 等待栏:

function h = mywaitbar ( varargin )
  % preallocate output
  h = [];
  % use an internal persistent variable
  persistent active
  % by default set to true
  if isempty ( active ); active = true; end
  % Check to see if its a control call
  if nargin == 1 && ischar ( varargin{1} )
    % is it a call to disable it?
    if strcmp ( varargin{1}, '**disable**' )
      active = false;
    else 
      active = true;
    end
    return
  end
  if active 
    h = waitbar ( varargin{:} );
  end
end      

这样做的缺点是您需要查找所有等待栏命令并将其替换为新功能 'waitbar',但这是一次性操作。

然后通过以下方式禁用对 waitbar 的所有未来调用:

 mywaitbar ( '**disable**' )

运行 您的代码将不会显示,并且不会显示等待栏。使用持久变量将保持状态,直到您重新启动 Matlab(或调用 clear all)。要停止 'clear all' 重置它,您可以在函数中使用 mlock

要重新启用等待栏:

 mywaitbar ( '**enable**' )

要测试它,请使用以下代码:

for ii=1:10
  h = mywaitbar ( ii );
  fprintf ( 'test with waitbar %i\n', ii);
end

现在禁用等待栏功能:

mywaitbar ( '**disable**' )
for ii=1:10
  h = mywaitbar ( ii );
  fprintf ( 'test with waitbar disabled %i\n', ii);
end

您会看到上面的代码运行时没有显示等待栏。