【问题标题】:Disable progress bar Matlab [duplicate]禁用进度条Matlab [重复]
【发布时间】:2017-04-13 09:33:14
【问题描述】:

我在 Matlab 中使用由大量嵌套函数组成的代码。大量这些函数显示progressbars。是否有任何 Matlab 命令或任何可能禁用 progressbars 显示,而无需定位和注释/删除调用它们的所有行?

【问题讨论】:

  • 你说的是这个吗? nl.mathworks.com/help/matlab/ref/waitbar.html 或基于自定义文本的?
  • 你能用一个简单的代码解释一下哪些函数显示了“进度条”吗?
  • 你说的是progressbar实用程序in the File Exchange吗?
  • 这是一个复杂的代码。我说的是一个标准的 Matlab 进度条,例如由这行代码引起的:“reporting.ShowProgress('Rescale')”。由于我正在从我创建的函数运行代码,因此我想要“警告”之类的东西,但要抑制所有进度条输出。你知道有什么解决办法吗?

标签: matlab progress-bar progress


【解决方案1】:

我从您的 cmets 中假设您的意思是您有很多调用 waitbar 的函数。

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

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

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)。要停止“全部清除”重置它,您可以在函数中使用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

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

【讨论】:

  • 非常感谢您的回答。如果我理解正确,您建议我在代码执行之前打开一个等待栏以抑制其他人。我怎样才能做到这一点?此命令启动所有嵌套的等待栏:total=r.GetResult('a')。为了抑制等待栏,我必须在此命令之前写些什么?谢谢
  • 不,这不是我的建议,保存函数并运行我添加的测试,看看它是如何工作的。
  • 好的,但我的问题是我无法找到初始化进度条的代码的每个部分。我需要的是在代码执行之前打开一个等待栏以抑制其他人。你知道怎么做吗?
  • 为什么找不到?您可以使用 notepad++ 之类的工具搜索并替换所有包含文本 waitbar 的 m 文件为 mywaitbar。理论上,您可以创建自己的 waitbar 并将可见性设置为关闭 - “可能”工作 -> 但如果任何子代码删除将失败的等待栏,因为下一个等待栏调用将创建一个新的。跨度>
  • 好的,谢谢。我试试
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-22
  • 1970-01-01
  • 2018-04-06
  • 2014-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多