TabGroup
选项卡组 UI 容器

说明
选项卡组 UI 容器在 App 中对选项卡进行分组和管理。在创建选项卡组后,使用 TabGroup
对象修改其外观和行为。
创建对象
使用 uitabgroup
函数在 App 中创建一个选项卡组。
属性
选项卡
选项卡标签位置,指定为 'top'
、'bottom'
、'left'
或 'right'
。此属性指定选项卡标签相对于选项卡组的位置。
当前选择的选项卡,指定为 Tab
对象。使用此属性可确定选项卡组中当前选定的选项卡。您也可以使用此属性设置默认选项卡选项。SelectedTab
属性的默认值是您添加到 TabGroup
中的第一个 Tab
。
交互性
可见性状态,指定为 'on'
或 'off'
,或者指定为数值或逻辑值 1
(true
) 或 0
(false
)。值 'on'
等效于 true
,'off'
等效于 false
。因此,您可以使用此属性的值作为逻辑值。该值存储为 matlab.lang.OnOffSwitchState
类型的 on/off 逻辑值。
'on'
- 显示对象。'off'
- 隐藏对象而不删除它。您仍然可以访问不可见 UI 组件的属性。
要使您的 App 更快地启动,请将不需要在启动时出现的所有组件的 Visible
属性设置为 'off'
。
更改不可见的容器的大小将在该容器变得可见时触发 SizeChangedFcn
回调。
更改容器的 Visible
属性不会改变其子组件的 Visible
属性值。即使隐藏容器会导致子组件隐藏也是如此。
工具提示,指定为字符向量、字符向量元胞数组、字符串数组或分类数组。使用此属性可使用户在运行时将指针悬停在选项卡组上时显示消息。仅当选项卡组中没有选项卡时,才会显示选项卡组的工具提示。要显示多行文本,请指定字符向量元胞数组、字符串数组或分类数组。数组中的每个元素变为一行文本。如果将此属性指定为分类数组,MATLAB® 将使用数组中的值,而不是完整的类别集。
上下文菜单,指定为使用 uicontextmenu
函数创建的 ContextMenu
对象。使用此属性可在您右键点击组件时显示上下文菜单。
位置
选项卡组的位置和大小,指定为 [left bottom width height]
形式的四元素向量。
此表介绍该向量中的每个元素。
元素 | 描述 |
---|---|
left | 父容器的内部左边缘与选项卡组的外部左边缘之间的距离 |
bottom | 父容器的内部下边缘与选项卡组的外部下边缘之间的距离 |
width | 选项卡组的左右外部边缘之间的距离 |
height | 选项卡组的上下外部边缘之间的距离 |
所有测量值都采用 Units
属性指定的单位。
Position
值相对于父容器的可绘制区域。可绘制区域是指容器边框内的区域,不包括装饰元素(如菜单栏或标题)所占的区域。
选项卡组的位置和大小,不包括边框和选项卡标题,指定为 [left bottom width height]
形式的四元素向量。所有测量值都采用 Units
属性指定的单位。
InnerPosition
值相对于父容器的可绘制区域。可绘制区域是指容器边框内的区域,不包括装饰元素(如菜单栏或标题)所占的区域。
选项卡组的位置和大小,指定为 [left bottom width height]
形式的四元素向量。所有测量值都采用 Units
属性指定的单位。
此属性值等同于 Position
属性值。
测量单位,指定为下表中的值之一。
单位值 | 描述 |
---|---|
'pixels' (基于 uifigure 的 App 中的默认值) | 在 Windows® 和 Macintosh 系统上,像素的大小为 1/96 英寸。此大小与系统分辨率无关。 在 Linux® 系统上,一个像素的大小由系统分辨率确定。 |
'normalized' (基于 figure 的 App 中的默认值) | 这些单位依据父容器进行归一化。容器的左下角映射到 |
'inches' | 英寸。 |
'centimeters' | 厘米。 |
'points' | 磅。1 磅等于 1/72 英寸。 |
'characters' | 这些单位基于图形根对象的默认 uicontrol 字体:
要访问默认的 uicontrol 字体,请使用 |
推荐值为 'pixels'
,因为大多数 MATLAB App 构建功能都以像素为单位测量距离。您可以创建一个对象,该对象根据父容器的大小重新缩放,方法是将使用 uigridlayout
函数创建的一个网格布局管理器作为该对象的父级。有关详细信息,请参阅Lay Out Apps Programmatically。
自动调整子组件的大小,指定为 'on'
或 'off'
,或者指定为数值或逻辑值 1
(true
) 或 0
(false
)。值 'on'
等效于 true
,'off'
等效于 false
。因此,您可以使用此属性的值作为逻辑值。该值存储为 matlab.lang.OnOffSwitchState
类型的 on/off 逻辑值。
'on'
- 当容器调整大小时,子组件会自动调整大小。此值是使用uifigure
函数创建的图窗中选项卡组的默认值。'off'
- 子组件不调整大小。此值是使用figure
函数创建的图窗中选项卡组的默认值。
AutoResizeChildren
属性影响容器的直接子组件,而不影响嵌套容器内的子组件。
当 AutoResizeChildren
为 'on'
时,某些子组件不会自动调整大小。例如,仅包含非调整大小组件的标签、按钮和容器不会调整大小。
要自定义调整大小行为,请向容器添加网格布局管理器,或将 AutoResizeChildren
属性设置为 'off'
并为容器创建一个 SizeChangedFcn
回调。有关详细信息,请参阅在 App 设计工具中管理可调整大小的 App。
要禁用 App 的大小调整,请将图窗的 Resize
属性设置为 'off'
。
建议仅在以像素为单位进行布局的 App 中将 AutoResizeChildren
指定为 'on'
。在不以像素为单位进行布局的 App 中启用自动调整大小可能导致意外行为。
布局选项,指定为 GridLayoutOptions
对象。此属性为网格布局管理器的子级组件指定选项。如果组件不是网格布局管理器的子级(例如,它是图窗或面板的子级),则此属性为空且不起作用。但是,如果组件是网格布局管理器的子级,则可以通过在 GridLayoutOptions
对象上设置 Row
和 Column
属性,将组件放置在网格的所需行和列中。
例如,以下代码将一个选项卡组放置在其父网格的第三行第二列中。
g = uigridlayout([4 3]); tg = uitabgroup(g); tg.Layout.Row = 3; tg.Layout.Column = 2;
要使该选项卡组跨多个行或列,请将 Row
或 Column
属性指定为二元素向量。例如,此选项卡组跨列 2
到 3
:
tg.Layout.Column = [2 3];
回调
所选内容改变时的回调,指定为下列值之一:
函数句柄。
第一个元素是函数句柄的元胞数组。元胞数组中的后续元素是传递到回调函数的参量。
包含有效 MATLAB 表达式的字符向量(不推荐)。MATLAB 在基础工作区计算此表达式。
当用户在选项卡组中选择不同的选项卡时,将执行此回调函数。
此回调函数可以访问有关用户与选项卡的交互的特定信息。MATLAB 将 SelectionChangedData
对象中的此信息作为第二个参量传递给回调函数。在 App 设计工具中,该参量名为 event
。您可以使用圆点表示法查询对象属性。例如,event.NewValue
返回当前选择的选项卡。SelectionChangedData
对象不可用于指定为字符向量的回调函数。
下表列出了 SelectionChangedData
对象的属性。
属性 | 描述 |
---|---|
OldValue | 之前选择的 |
NewValue | 当前选择的 |
Source | 执行回调的组件 |
EventName |
|
有关编写回调的详细信息,请参阅App 设计工具中的回调。
更改大小时执行的回调,指定为下列值之一:
函数句柄。
第一个元素是函数句柄的元胞数组。元胞数组中的后续元素是传递到回调函数的参量。
包含有效 MATLAB 表达式的字符向量(不推荐)。MATLAB 在基础工作区计算此表达式。
定义此回调在此容器的大小更改时(例如,当用户调整窗口大小时)自定义 App 布局。在其中编写代码来调整子组件的 Position
属性。
注意
除非此容器的 AutoResizeChildren
属性设置为 'off'
,否则 SizeChangedFcn
回调将不会执行。在 App 设计工具中,您可以通过选择容器并清除组件浏览器的组件选项卡中的 AutoResizeChildren 复选框,使 SizeChangedFcn
可执行。
SizeChangedFcn
回调在下列情况下执行:
此容器首次变得可见。
此容器在大小改变时可见。
此容器在大小改变后首次变得可见。如果容器在大小改变时不可见,但后来变得可见,就属于这种情况。
定义 SizeChangedFcn
回调时要考虑的其他重要事项:
考虑将此容器推迟到
SizeChangedFcn
使用的所有变量都定义之后再显示。此做法可避免SizeChangedFcn
回调返回错误。要延迟显示容器,请将其Visible
属性设置为'off'
。然后,在定义您的SizeChangedFcn
回调使用的变量之后将Visible
属性设置为'on'
。如果您的 App 包含嵌套容器,它们从里向外调整大小。
要访问从
SizeChangedFcn
中调整大小的容器,请指向源对象(回调中的第一个输入参量)或使用gcbo
函数。
指定调整大小行为的替代方法是创建 GridLayout
对象或使用 App 设计工具中的自动调整布局选项。这些选项比 SizeChangedFcn
回调更容易使用。然而,与这些选项相比,SizeChangedFcn
回调有一些优势。例如:
将组件调整到您定义的最小或最大大小。
实现非线性调整大小行为。
按下鼠标按键回调函数,指定为下列值之一:
函数句柄。
第一个元素是函数句柄的元胞数组。元胞数组中的后续元素是传递到回调函数的参量。
包含有效 MATLAB 表达式的字符向量(不推荐)。MATLAB 在基础工作区计算此表达式。
有关将回调属性值指定为函数句柄、元胞数组或字符向量的详细信息,请参阅Specify a Callback Function。
ButtonDownFcn
回调是当用户在容器内点击鼠标按键时执行的函数。
对象创建函数,指定为下列值之一:
函数句柄。
第一个元素是函数句柄的元胞数组。元胞数组中的后续元素是传递到回调函数的参量。
包含有效 MATLAB 表达式的字符向量(不推荐)。MATLAB 在基础工作区计算此表达式。
有关将回调指定为函数句柄、元胞数组或字符向量的详细信息,请参阅App 设计工具中的回调。
此属性指定要在 MATLAB 创建对象时执行的回调函数。MATLAB 将在执行 CreateFcn
回调之前初始化所有属性值。如果不指定 CreateFcn
属性,则 MATLAB 执行默认的创建函数。
对现有组件设置 CreateFcn
属性没有任何作用。
如果将此属性指定为函数句柄或元胞数组,则可以使用回调函数的第一个参量访问正在创建的对象。否则,使用 gcbo
函数访问该对象。
对象删除函数,指定为下列值之一:
函数句柄。
第一个元素是函数句柄的元胞数组。元胞数组中的后续元素是传递到回调函数的参量。
包含有效 MATLAB 表达式的字符向量(不推荐)。MATLAB 在基础工作区计算此表达式。
有关将回调指定为函数句柄、元胞数组或字符向量的详细信息,请参阅App 设计工具中的回调。
此属性指定在 MATLAB 删除对象时要执行的回调函数。MATLAB 在销毁对象的属性之前执行 DeleteFcn
回调。如果不指定 DeleteFcn
属性,则 MATLAB 执行默认的删除函数。
如果将此属性指定为函数句柄或元胞数组,则可以使用回调函数的第一个参量访问要删除的对象。否则,使用 gcbo
函数访问该对象。
回调执行控件
回调中断,指定为 'on'
或 'off'
,或者指定为数值或逻辑值 1
(true
) 或 0
(false
)。值 'on'
等效于 true
,'off'
等效于 false
。因此,您可以使用此属性的值作为逻辑值。该值存储为 matlab.lang.OnOffSwitchState
类型的 on/off 逻辑值。
此属性确定是否可以中断运行中回调。有以下两种回调状态要考虑:
运行中回调是当前正在执行的回调。
中断回调是试图中断运行中回调的回调。
每次执行处理回调队列的命令时,MATLAB 都会确定回调中断行为。这些命令包括 drawnow
、figure
、uifigure
、getframe
、waitfor
和 pause
。
如果运行中回调不包含上述命令之一,则不会发生中断。MATLAB 首先完成执行运行中回调,然后执行中断回调。
如果运行中回调确实包含上述命令之一,则由运行中回调所属对象的 Interruptible
属性来确定是否发生中断:
如果
Interruptible
的值为'off'
,则不会发生中断。此时,由中断回调所属对象的BusyAction
属性确定中断回调是被丢弃还是添加到回调队列中。如果
Interruptible
的值为'on'
,则发生中断。下次 MATLAB 处理回调队列时,它会停止运行中回调的执行,并执行中断回调。在中断回调完成后,MATLAB 将继续执行运行中回调。
注意
回调的中断和执行在以下情况下会有不同的表现:
如果中断回调是
DeleteFcn
、CloseRequestFcn
或SizeChangedFcn
回调,则无论是否存在Interruptible
属性值都会发生中断。如果运行中回调当前正在执行
waitfor
函数,则无论是否存在Interruptible
属性值都会发生中断。如果中断回调由
Timer
对象所有,则回调将根据调度执行,而不考虑Interruptible
属性值。
回调排队,指定为 'queue'
或 'cancel'
。BusyAction
属性决定 MATLAB 如何处理中断回调的执行。有以下两种回调状态要考虑:
运行中回调是当前正在执行的回调。
中断回调是试图中断运行中回调的回调。
BusyAction
属性仅在同时满足以下两个条件时才确定回调排队行为:
在这些情况下,由中断回调所属对象的 BusyAction
属性确定 MATLAB 如何处理中断回调。以下是 BusyAction
属性的可能值:
'queue'
- 将中断回调放入队列中,以便在运行中回调执行完毕后进行处理。'cancel'
- 不执行中断回调。
此 属性 为只读。
删除状态,以 matlab.lang.OnOffSwitchState
类型的 on/off 逻辑值形式返回。
当 DeleteFcn
回调开始执行时,MATLAB 会将 BeingDeleted
属性设置为 'on'
。BeingDeleted
属性将一直保持 'on'
设置状态,直到组件对象不再存在为止。
在查询或修改对象之前,请先检查其 BeingDeleted
属性的值,以确认它不是待删除项。
父级/子级
父容器,指定为 Figure
对象或其子容器之一:Tab
、Panel
、ButtonGroup
或 GridLayout
。如果未指定容器,MATLAB 将调用 figure
函数以创建一个新 Figure
对象来充当父容器。
TabGroup
的子级,以空 GraphicsPlaceholder
或 Tab
对象的一维数组形式返回。
不能使用 TabGroup
的 Children
属性添加或删除选项卡。可以使用该属性查看选项卡列表或对选项卡重新排序。Tab
对象在该数组中的顺序反映了显示在屏幕上的选项卡的顺序。
要向该列表中添加子级,请将 Tab
对象的 Parent
属性设置为 TabGroup
对象。
对象句柄的可见性,指定为 'on'
、'callback'
或 'off'
。
此属性控制对象在其父级的子级列表中的可见性。当对象未显示在其父级的子级列表中时,通过搜索对象层次结构或查询属性来获取对象的函数不会返回该对象。这些函数包括 get
、findobj
、clf
和 close
。对象即使在不可见时也有效。如果可以访问某个对象,则可以设置和获取其属性,并将其传递给针对对象进行运算的任意函数。
HandleVisibility 值 | 描述 |
---|---|
'on' | 对象始终可见。 |
'callback' | 对象对于回调或回调调用的函数可见,但对于命令行调用的函数不可见。此选项阻止通过命令行访问对象,但允许回调函数访问它。 |
'off' | 对象始终不可见。该选项用于防止另一函数无意中对 UI 进行更改。将 HandleVisibility 设置为 'off' 可在执行该函数时暂时隐藏对象。 |
标识符
此 属性 为只读。
图形对象的类型,以 'uitabgroup'
形式返回。
对象标识符,指定为字符向量或字符串标量。您可以指定唯一的 Tag
值作为对象的标识符。如果需要访问您代码中其他位置的对象,可以使用 findobj
函数基于 Tag
值搜索对象。
用户数据,指定为任何 MATLAB 数组。例如,您可以指定标量、向量、矩阵、元胞数组、字符数组、表或结构体。使用此属性存储对象上的任意数据。
如果您在 App 设计工具中工作,请在该 App 中创建公共或私有属性以共享数据,而不是使用 UserData
属性。有关详细信息,请参阅在用 App 设计工具创建的 App 内共享数据。
示例
创建一个图窗,其中包含一个选项卡组和两个选项卡。
f = figure; tabgp = uitabgroup(f,"Position",[.05 .05 .3 .8]); tab1 = uitab(tabgp,"Title","Settings"); tab2 = uitab(tabgp,"Title","Options");
获取当前选择的选项卡。
currenttab = tabgp.SelectedTab
currenttab = Tab (Settings) with properties: Title: 'Settings' BackgroundColor: [0.9400 0.9400 0.9400] Position: [0.0119 0.0089 0.9702 0.9107] Units: 'normalized'
创建包含一个选项卡的选项卡组。向该选项卡添加六个 UI 组件,前三个组件位于选项卡的上边框的外部。
fig = uifigure; tg = uitabgroup(fig,"Position",[20 20 196 145]); t = uitab(tg,"Title","Member Information"); ef1 = uieditfield(t,"Text","Position",[11 165 140 22],"Value","First Name"); ef2 = uieditfield(t,"Text","Position",[11 140 140 22],"Value","Last Name"); ef3 = uieditfield(t,"Text","Position",[11 115 140 22],"Value","Address"); dd = uidropdown(t,"Position",[11 90 140 22],"Items",{'Male','Female'}); cb = uicheckbox(t,"Position",[11 65 140 22],"Text","Member"); b = uibutton(t,"Position",[11 40 140 22],"Text","Send");
通过将选项卡的 Scrollable
属性设置为 "on"
来启用滚动。默认情况下,滚动条显示在顶部。
t.Scrollable = "on";
在新脚本中,在 UI 图窗中创建一个具有两个选项卡的选项卡组。将 SelectionChangedFcn
属性指定为名为 displaySelection
的函数的句柄。当用户在选项卡组中的选项卡之间切换时,将执行此函数。
在脚本的底部,定义 displaySelection
函数来接受 MATLAB 传递给回调函数的两个输入参量:
src
- 执行回调的组件event
- 关于触发回调的用户交互的信息
在回调函数中,编写代码以在命令行窗口中显示可见选项卡的标题。
fig = uifigure; tg = uitabgroup(fig,"SelectionChangedFcn",@displaySelection); t1 = uitab(tg,"Title","Data"); t2 = uitab(tg,"Title","Plots"); function displaySelection(src,event) t = event.NewValue; title = t.Title; disp("Viewing the " + title + " tab") end
运行脚本并在选项卡之间切换以显示选项卡标题。
有关详细信息,请参阅Create Callbacks for Apps Created Programmatically。
版本历史记录
在 R2014b 中推出这些属性可用于使用 figure
函数创建的 App 中的选项卡组:
Tooltip
AutoResizeChildren
Layout
对于使用 figure
函数创建的 App,当您查询选项卡组的 InnerPosition
属性时,该属性将返回与上一版本不同的值。此外,如果 TabLocation
是 'left'
或 'bottom'
,当您查询选项卡组中某个选项卡的 Position
、InnerPosition
和 OuterPosition
属性时,这些属性可能会返回与以前版本不同值。这些更改使属性值和行为与基于 uifigure
的 App 中的属性一致。
下表描述 R2025a 及更早版本的属性值之间的差异。
属性 | 从 R2025a 开始 | R2024b 及更早版本 | ||
---|---|---|---|---|
描述 | 图像 | 描述 | 图像 | |
选项卡组的 InnerPosition | 形式为 [left bottom width height] 的四元素向量,表示选项卡组相对于其父级的可绘制区域的大小和位置,不包括其中包含的选项卡的边框和标题 | 选项卡组 | 形式为 [left bottom width height] 的四元素向量,表示选项卡组相对于其父级的可绘制区域的大小和位置,包括其中所包含的选项卡的边框和标题 | 选项卡组 |
选项卡的 Position 、InnerPosition 和 OuterPosition | 形式为 [left bottom width height] 的四元素向量,表示选项卡相对于选项卡组可绘制区域的大小和位置,其中选项卡组可绘制区域不包括边框和标题 | 相对于选项卡组可绘制区域(蓝色实线)的选项卡 | 形式为 [left bottom width height] 的四元素向量,表示选项卡相对于选项卡组可绘制区域的大小和位置,其中选项卡组可绘制区域包括边框和标题 | 相对于选项卡组可绘制区域(蓝色实线)的选项卡 |
如果您注意到 App 布局的变化,请考虑以下列方式更新您的代码:
选项卡组
InnerPosition
- 用选项卡组Position
属性替换对选项卡组InnerPosition
属性的引用,以使用选项卡组的大小和位置,包括边框和选项卡标题。选项卡
Position
、InnerPosition
和OuterPosition
- 替换对位置向量的前两个元素的引用,以使用选项卡标题在左侧或底部占据的空间。例如,如果您的 App 包含TabLocation
值为'left'
的选项卡组,并且您引用该选项卡组中某个选项卡的Position
属性,请将该引用替换为选项卡组边框和选项卡可绘制区域之间的水平距离。
对于在 App 设计工具中创建并使用 uifigure
函数的 App,当您查询选项卡组的 InnerPosition
属性时,该属性将返回与以前版本不同值。此外,如果 TabLocation
是 'left'
或 'bottom'
,当您查询选项卡组中某个选项卡的 Position
、InnerPosition
和 OuterPosition
属性时,这些属性可能会返回与以前版本不同值。
下表描述 R2022b 及更早版本的属性值之间的差异。
属性 | 从 R2022b 开始 | R2022a 及更早版本 | ||
---|---|---|---|---|
描述 | 图像 | 描述 | 图像 | |
选项卡组的 InnerPosition | 形式为 [left bottom width height] 的四元素向量,表示选项卡组相对于其父级的可绘制区域的大小和位置,不包括其中包含的选项卡的边框和标题 | 选项卡组 | 形式为 [left bottom width height] 的四元素向量,表示选项卡组相对于其父级的可绘制区域的大小和位置,包括其中所包含的选项卡的边框和标题 | 选项卡组 |
选项卡的 Position 、InnerPosition 和 OuterPosition | 形式为 [left bottom width height] 的四元素向量,表示选项卡相对于选项卡组可绘制区域的大小和位置,其中选项卡组可绘制区域不包括边框和标题 | 相对于选项卡组可绘制区域(蓝色实线)的选项卡 | 形式为 [left bottom width height] 的四元素向量,表示选项卡相对于选项卡组可绘制区域的大小和位置,其中选项卡组可绘制区域包括边框和标题 | 相对于选项卡组可绘制区域(蓝色实线)的选项卡 |
如果您注意到 App 布局的变化,请考虑以下列方式更新您的代码:
选项卡组
InnerPosition
- 用选项卡组Position
属性替换对选项卡组InnerPosition
属性的引用,以使用选项卡组的大小和位置,包括边框和选项卡标题。选项卡
Position
、InnerPosition
和OuterPosition
- 替换对位置向量的前两个元素的引用,以使用选项卡标题在左侧或底部占据的空间。例如,如果您的 App 包含TabLocation
值为'left'
的选项卡组,并且您引用该选项卡组中某个选项卡的Position
属性,请将该引用替换为选项卡组边框和选项卡可绘制区域之间的水平距离。
从 R2020a 开始,不推荐使用 UIContextMenu
属性将上下文菜单分配给图形对象或 UI 组件。请改用 ContextMenu
属性。属性值是相同的。
目前没有停止支持 UIContextMenu
属性的计划。但是,UIContextMenu
属性将不再出现在对图形对象或 UI 组件调用 get
函数时所返回的列表中。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)