Main Content

waitbar

创建或更新等待条对话框

说明

示例

注意

在 App 设计工具和使用 uifigure 函数创建的 App 中,推荐使用 uiprogressdlg 而不是 waitbar,因为它提供额外的自定义选项。

f = waitbar(x,msg) 创建一个非模态对话框,其中包含一个带有指定消息的等待条。等待条具有小数形式的长度 x。该对话框保持打开状态,直到控制它的代码将其关闭或用户点击对话框标题栏中的关闭按钮 (X) 为止。Figure 对象返回为 f

如果您要在多个 App 窗口、MATLAB® 桌面或 Simulink® 上显示等待条对话框,并且在响应对话框之前仍能与它们进行交互,请使用 waitbar 函数。

示例

f = waitbar(x,msg,Name,Value) 使用一个或多个名称-值对组参数来指定其他选项,这些参数设置对话框的 figure 属性。例如,'Name','Progress' 将对话框名称设置为 Progress。在所有其他输入参数之后指定名称-值对组参数。

waitbar(x) 将当前等待条对话框中的等待条长度更新为 xx 的后续值通常会增大。如果后续值降低,等待条将反向运行。

waitbar(x,f) 将等待条对话框 f 中的等待条长度更新到新位置 x

示例

waitbar(x,f,msg) 更新等待条对话框 f 中的消息。

示例

全部折叠

创建一个等待条对话框,并在代码中的三个位置点对小数形式的等待条长度和显示的消息进行更新。

使用此代码模拟执行冗长计算的过程。pause 函数将第一个等待条对话框的图窗对象传递给后续的 waitbar 函数调用。以这种方式传递图窗对象可确保对话框在每个点进行更新,而不是重新创建。模拟计算完成后,对话框将关闭。

function basicwaitbar
f = waitbar(0,'Please wait...');
pause(.5)

waitbar(.33,f,'Loading your data');
pause(1)

waitbar(.67,f,'Processing your data');
pause(1)

waitbar(1,f,'Finishing');
pause(1)

close(f)
end

Wait bar about 1/3 of the full length with text "Loading your data"

添加取消按钮,使用户能够停止正在进行的计算。

使用以下代码在 for 循环迭代中收敛 pi 的值,并在每次迭代时更新等待条和消息。当用户点击取消按钮时,MATLAB 将图窗应用程序数据 (appdata) 中的逻辑标志 'canceling' 设置为 1。代码在 for 循环中测试该值,如果标志值为 1,则退出循环。

CreateCancelBtn 回调设置为一个字符向量值。只有在该值所指定的代码很简单时才可以这样设置(比如像此处的回调代码这样),其他情况下不建议这样做。有关详细信息,请参阅Create Callbacks for Apps Created Programmatically

function approxpi

f = waitbar(0,'1','Name','Approximating pi...',...
    'CreateCancelBtn','setappdata(gcbf,''canceling'',1)');

setappdata(f,'canceling',0);

% Approximate pi^2/8 as: 1 + 1/9 + 1/25 + 1/49 + ...
pisqover8 = 1;
denom = 3;
valueofpi = sqrt(8 * pisqover8);

steps = 20000;
for step = 1:steps
    % Check for clicked Cancel button
    if getappdata(f,'canceling')
        break
    end
    
    % Update waitbar and message
    waitbar(step/steps,f,sprintf('%12.9f',valueofpi))
    
    % Calculate next estimate 
    pisqover8 = pisqover8 + 1 / (denom * denom);
    denom = denom + 2;
    valueofpi = sqrt(8 * pisqover8);
end

delete(f)
end

Wait bar with title "Approximating pi..." and a Cancel button. The text is an approximation of pi, and the bar length is a fraction of the full length.

输入参数

全部折叠

小数形式的等待条长度,指定为 01 之间的一个实数。x 的后续值通常会增大。如果后续值减小,等待条将反向运行。

示例: .75

等待条消息,指定为字符向量、字符向量元胞数组或字符串数组。消息显示在对话框中进度条的上方。

  • 如果将消息指定为字符向量,则长消息将换行以适应对话框大小。

  • 如果将消息指定为字符向量元胞数组,将在每个数组元素后进行换行。长元素会换行适应对话框大小。

示例: 'Please Wait'

示例: {'Please wait', 'The operation is processing'}

前面创建的等待条对话框的图窗对象,指定为创建该图窗对象时使用的输出变量。

名称-值参数

将可选的参数对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参数名称,Value 是对应的值。名称-值参数必须出现在其他参数之后,但参数对组的顺序无关紧要。

在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: 'Name','Wait Bar'

注意

此处列出的属性只是可设置属性中的一部分。有关完整列表,请参阅 Figure 属性

取消按钮的按钮回调,指定为函数句柄、元胞数组或字符向量(不推荐)。MATLAB 将取消按钮的回调值和图窗的 CloseRequestFcn 回调值都设置为由 callback 参数值指定的命令。有关详细信息,请参阅Create Callbacks for Apps Created Programmatically

注意

如果指定了 CreateCancelBtn 回调,可以调用 delete 函数来删除等待条对话框。指定 CreateCancelBtn 回调时,close 函数不能关闭对话框,还会使取消和关闭 (X) 按钮不响应。出现这种情况是因为 CreateCancelBtn 回调以递归方式调用自身。在这种情况下,必须强制删除等待条,例如,使用如下代码:

set(groot,'ShowHiddenHandles','on')
delete(get(groot,'Children'))
但是,发出这些命令将会删除所有打开的图窗,而不仅仅是等待条对话框。

示例: waitbar(.5,'Processing','CreateCancelBtn',@myfun)CreateCancelBtn 回调函数指定为函数句柄。

示例: waitbar(.5,'Processing','CreateCancelBtn',{@myfun,x})CreateCancelBtn 回调函数指定为元胞数组。这种情况下,该函数接受输入参数 x

图窗的名称,指定为字符向量或字符串标量。

示例: figure('Name','Results') 将图窗的名称设置为 'Results'

默认情况下,名称为 'Figure n',其中 n 是整数。如果您指定 Name 属性,图窗的标题将变为 'Figure n: name'。如果您希望只显示 Name 值,请将 IntegerHandleNumberTitle 设置为 'off'

可绘制区域的位置和大小,指定为 [left bottom width height] 形式的向量。此区域不包括图窗边框、标题栏、菜单栏和工具栏。

此表介绍 Position 向量中的每个元素。

元素描述
left从主画面左边缘到窗口的内部左边缘的距离。在具有多个监视器的系统上,此值可能为负数。

如果图窗已停靠,则此值相对于 MATLAB 桌面中的“图窗”面板。
bottom从主画面下边缘到窗口的内部下边缘的距离。在具有多个监视器的系统上,此值可能为负数。

如果图窗已停靠,则此值相对于 MATLAB 桌面中的“图窗”面板。
widthwaitbar 的左右内部边缘之间的距离。
height窗口的上下内部边缘之间的距离。

所有测量值都采用 Units 属性指定的单位。

图窗停靠时不能指定图窗的 Position 属性。

MATLAB Online™ 中,Position 向量的 bottomleft 元素被忽略。

要放置包括边框、标题栏、菜单栏和工具栏在内的整个窗口,请使用 OuterPosition 属性。

注意

Windows® 操作系统会强制应用最小窗口宽度和最大窗口大小。如果您指定的图窗尺寸超出这些限制,将按照这些限制而不是指定的尺寸显示图窗。

测量单位,指定为下表中的值之一。

单位值描述
'pixels'(默认值)

像素。

从 R2015b 开始,以像素为单位的距离不再依赖 Windows 和 Macintosh 系统上的系统分辨率:

  • 在 Windows 系统上,一个像素是 1/96 英寸。

  • Macintosh 系统上,一个像素是 1/72 英寸。

在 Linux® 系统上,一个像素的大小由系统分辨率确定。

'normalized'这些单位依据父容器进行归一化。容器的左下角映射到 (0,0),右上角映射到 (1,1)
'inches'英寸。
'centimeters'厘米。
'points'磅。1 磅等于 1/72 英寸。
'characters'

这些单位基于图形根对象的默认 uicontrol 字体:

  • 字符宽度 = 字母 x 的宽度。

  • 字符高度 = 两个文本行的基线之间的距离。

要访问默认的 uicontrol 字体,请使用 get(groot,'defaultuicontrolFontName')set(groot,'defaultuicontrolFontName')

MATLAB 从父对象的左下角测量所有单位。

此属性会影响 Position 属性。如果更改 Units 属性,请考虑在完成计算后将其值还原为默认值,以免影响采用默认值的其他函数。

指定 UnitsPosition 属性的顺序具有以下影响:

  • 如果您在 Position 属性之前指定 Units,则 MATLAB 会使用您指定的单位来设置 Position

  • 如果您在 Position 属性之后指定 Units 属性,则 MATLAB 会使用默认的 Units 来设置 position。然后,MATLAB 将 Position 值转换为以您指定的单位表示的等价值。

窗口样式,指定为下列值之一:

  • 'normal' - 此图窗窗口独立于其他窗口,并且在显示图窗时可以访问其他窗口。

  • 'modal' - 该图窗显示在所有现有图窗窗口的上方,并使这些窗口变得无法访问(只要顶层图窗存在并保持模态)。但是,任何在模态图窗之后创建的新图窗都会显示出来。

    存在多个模态窗口时,最新创建的窗口将会保持焦点并位于所有其他窗口之上,直到变得不可见、恢复为正常窗口样式或被删除。此时,焦点会重新回到上次具有焦点的窗口。

  • 'docked' - 图窗显示在桌面或文档窗口中。如果 WindowStyle 属性设置为 'docked',则无法将 DockControls 属性设置为 'off'MATLAB Online 中不支持 'docked' 选项。

注意

以下是 WindowStyle 属性的一些重要特性和一些推荐的最佳做法:

  • 创建 UI 窗口时,应始终指定 WindowStyle 属性。如果还想要设置图窗的 ResizePositionOuterPosition 属性,先要设置 WindowStyle 属性。

  • 您可以随时更改图窗的 WindowStyle 属性,包括图窗可见并包含子图窗的情况。但是,在某些系统上,设置该属性可能会导致图窗闪烁或者消失后重新显示,具体取决于系统的正常窗口和模态窗口的实现。为实现最佳视觉效果,应在创建时或图窗不可见时设置 WindowStyle 属性。

  • 对图窗调用 reset 并不会改变 WindowStyle 属性的值。

模态窗口样式行为

WindowStyle 设为 'modal' 时,图窗窗口将会捕获所有 MATLAB 窗口(只要可见)上的全部键盘和鼠标操作。属于应用程序而非 MATLAB 的窗口不受影响。

模态图窗获得焦点时键入 Ctrl+C 会导致图窗恢复到 'normal' WindowStyle 属性设置。这样用户可以在命令行键入内容。

WindowStyle 属性设置为 'modal' 并且 Visible 属性设置为 'off' 的图窗在 MATLAB 使它们变得可见之前不会以模态方式运行。因此,您可以隐藏模态窗口供以后重用,而不用销毁它。

模态图窗不显示菜单子级、内置菜单或工具栏。但是,在模态图窗中创建菜单或在具有菜单子级的图窗上将 WindowStyle 属性设置更改为 'modal' 并不是错误。Menu 对象会存在,而且图窗会保留它们。如果您将图窗的 WindowStyle 属性重置为 'normal',则会显示菜单。

详细信息

全部折叠

模态对话框

模态对话框阻止用户在响应该对话框之前与其他 MATLAB 窗口进行交互。

非模态对话框

非模态对话框允许用户在响应该对话框之前与其他 MATLAB 窗口进行交互。非模态对话框也称为普通对话框。

等待条

等待条是一个显示计算完成百分比的指示条,计算过程中将从左到右使用颜色逐步填充等待条。等待条也称为进度条。

提示

  • 要为单窗口 App 设计工具或基于 uifigure 的 App 创建模态进度对话框,请改用 uiprogressdlg 函数。

版本历史记录

在 R2006a 之前推出