如何设置Matlab等待条的大小?

3

这些是基本问题,但我在Matlab文档或谷歌上都没有找到解决方案。

  • 我的等待条(waitbar)有一个“取消”按钮和两行文本,但是文本无法适应等待条的大小。我只需要一些自适应或增加等待条的高度。

  • 为什么我不能通过点击“x”关闭等待条?我唯一能关闭它的方法是键入delete(h)。这只发生在我添加了取消按钮之后。

等待条创建:

h = waitbar(0,'Please wait...','CreateCancelBtn',...
    'setappdata(gcbf,''canceling'',1)',...
    'Position',[100 100 200 200]); % Position' does not work

循环体内:

    str = sprintf('Noise: %.2f (%d/%d). Planes: %.2f (%d/%d).\nOveral: %.1f%%',...
    noiseAmp,noiseId,noiseCount,slice,sliceId,sliceCount,100*perc);
    waitbar(perc,h, str);
1个回答

1
由于您设置了一个CreateCancelBtn回调函数,覆盖了典型的行为,因此您无法使用取消按钮删除waitbar ,并且在回调函数内部,您没有将其删除,所以它会保留下来。
您可以更新回调函数来设置应用程序数据删除它。
h = waitbar(0,'Please wait...','CreateCancelBtn',...
              'setappdata(gcbf,''canceling'',1); delete(gcbf);')

就改变位置而言,在构造函数中似乎不起作用,但是您可以在创建waitbar之后更改它的位置。
set(h, 'Position', [100 100 200 200])

请注意,这并不会改变所有“等待栏(waitbar)”内容的位置。这是因为MATLAB假设“等待栏(waitbar)”的大小永远不会改变,所以使用“像素(Pixel)”单位来定义所有组件的位置。
有一个小技巧可以使其起作用。您需要首先(在调整大小之前)将“等待栏(waitbar)”所有组件的“单位(Units)”更改为“归一化(Normalized)”。然后当您调整大小时,所有组件都会相应地移动。
h = waitbar(0, 'Please Wait', 'CreateCancelBtn', 'disp(h)');
set(findall(h), 'Units', 'Normalized')
set(h, 'Units', 'Pixels', 'Position', [100 100 200 200])

谢谢!这个职位就像你说的那样。关于关闭问题,即使我停止了代码的执行,我仍然无法关闭等待栏。有没有办法让“X”按钮既关闭窗口又起到取消按钮的作用?或者“X”只是删除(h)。真是荒谬,我不能通过点击“X”来关闭窗口。 - Pedro77
@Pedro77 你用的是哪个版本的MATLAB?在我的2015b版本上运行良好。 - Suever
我正在使用2016版本。是的,关闭也会取消。抱歉。但是,如果我遇到错误或点击“取消”而不关闭等待栏,我将无法通过单击X关闭它,需要输入delete(h)。 - Pedro77
@Pedro77 这个错误是来自于你的回调函数还是更新等待栏的代码呢? - Suever
我的东西出错了... 想象一下,等待栏已经打开,你在命令行上按下ctrl+c。之后,唯一关闭它的方法是在cmd中输入delete(h)。这太荒谬了。 - Pedro77
@Pedro77 很有趣。我没有2016,所以无法检查它。您可以尝试将waitbarCloseRequestFcn设置为'delete(gcbf)' - Suever

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接