Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

Menu 属性

控制菜单的外观和行为

菜单在 App 窗口顶部显示选项的下拉列表。调用 uimenu 函数创建一个菜单,或者在现有菜单中添加一个子菜单。属性控制菜单的外观和行为。使用圆点表示法引用特定的对象和属性。

fig = uifigure;
m = uimenu(fig);
m.Text = 'Open Selection';

Menu 对象的某些属性会有所不同,具体取决于菜单是使用 uifigure 函数还是 figure 函数创建的图窗的子级。uifigure 函数是构建新 App 时推荐使用的函数,也是在使用 App 设计工具创建的 App 中使用的函数。有关详细信息,请参阅构建 App 的方法

菜单

全部展开

菜单标签,指定为字符向量或字符串标量。此属性指定显示在菜单(或菜单项)上的标签。

避免使用以下区分大小写的保留字:'default''remove''factory'。如果必须使用保留字,请在单词前面指定反斜杠字符。例如,将 'default' 指定为 '\default'

您可以在标签文本中使用“与”(&) 字符来指定助记键盘快捷方式 (Alt+mnemonic)。按下 Alt 键时,“与”符号后的字符在菜单中带下划线显示。您可以通过按住 Alt 键并键入显示的字符来选择菜单项。

要使用助记键,您必须为在 App 中定义的所有菜单和菜单项指定助记键。如果您只为部分菜单或菜单项定义助记键,按 Alt 键不会有任何效果。

下表显示了一些示例:

文本值具有助记键提示的菜单标签
'&Open Selection'

Open Selection menu label. The "O" in "Open" is underlined.

'O&pen Selection'

Open Selection menu label. The "p" in "Open" is underlined.

'&Save && Go'

Open Selection menu label. The "S" in "Save & Go" is underlined.

键盘快捷方式,指定为一个字符或包含一个字符的字符串。使用此属性定义用于选择菜单项的键盘快捷方式。

示例: mitem.Accelerator = "H"

指定快捷键值后,用户可以通过按下字符和另一个键来选择菜单项,而不是用鼠标选择菜单项。按键顺序是针对特定平台的。

  • Windows® 系统:Ctrl+accelerator

  • Macintosh 系统:Command+accelerator

  • Linux® 系统:Ctrl+accelerator

使用快捷键时要牢记的事项:

  • 输入快捷键序列时,App 窗口必须已获得焦点。

  • 快捷键不能用于顶级菜单。

  • 仅当菜单项符合所有以下条件时,快捷键才能正常工作。

    • 它不包含任何子菜单项。

    • 它执行回调函数。

    • 它的 Visible 属性设置为 'on'

    • 其加速值尚未分配给同一图窗中的不同活动菜单项。

分隔线模式,指定为 'off''on',或者指定为数值或逻辑值 1 (true) 或 0 (false)。值 'on' 等效于 true'off' 等效于 false。因此,您可以使用此属性的值作为逻辑值。该值存储为 matlab.lang.OnOffSwitchState 类型的 on/off 逻辑值。

将此属性设置为 'on' 会在菜单项上方绘制一条分隔线。

注意

当菜单项是顶级菜单项时,将忽略 Separator 属性。

菜单复选标记指示符,指定为 'off''on',或者指定为数值或逻辑值 1 (true) 或 0 (false)。值 'on' 等效于 true'off' 等效于 false。因此,您可以使用此属性的值作为逻辑值。该值存储为 matlab.lang.OnOffSwitchState 类型的 on/off 逻辑值。

将此属性设置为 'on' 会在相应菜单项旁边放置一个复选标记。将此属性设置为 'off' 可移除复选标记。可使用此功能显示启用或禁用应用程序功能的菜单项的状态。

注意

当菜单项是以下项时,将忽略 Checked 属性:

  • 顶级菜单项

  • 包含一个或多个子菜单项的菜单项

菜单标签颜色,指定为 RGB 三元组、十六进制颜色代码或下表中列出的颜色选项之一。

RGB 三元组和十六进制颜色代码对于指定自定义颜色非常有用。

  • RGB 三元组是包含三个元素的行向量,其元素分别指定颜色中红、绿、蓝分量的强度。强度值必须位于 [0,1] 范围内,例如 [0.4 0.6 0.7]

  • 十六进制颜色代码是字符向量或字符串标量,以井号 (#) 开头,后跟三个或六个十六进制数字,范围可以是 0F。这些值不区分大小写。因此,颜色代码 "#FF8800""#ff8800""#F80""#f80" 是等效的。

此外,还可以按名称指定一些常见的颜色。下表列出了命名颜色选项、等效 RGB 三元组和十六进制颜色代码。

颜色名称短名称RGB 三元组十六进制颜色代码外观
"red""r"[1 0 0]"#FF0000"

Sample of the color red

"green""g"[0 1 0]"#00FF00"

Sample of the color green

"blue""b"[0 0 1]"#0000FF"

Sample of the color blue

"cyan" "c"[0 1 1]"#00FFFF"

Sample of the color cyan

"magenta""m"[1 0 1]"#FF00FF"

Sample of the color magenta

"yellow""y"[1 1 0]"#FFFF00"

Sample of the color yellow

"black""k"[0 0 0]"#000000"

Sample of the color black

"white""w"[1 1 1]"#FFFFFF"

Sample of the color white

以下是 MATLAB® 在许多类型的绘图中使用的默认颜色的 RGB 三元组和十六进制颜色代码。

RGB 三元组十六进制颜色代码外观
[0 0.4470 0.7410]"#0072BD"

Sample of RGB triplet [0 0.4470 0.7410], which appears as dark blue

[0.8500 0.3250 0.0980]"#D95319"

Sample of RGB triplet [0.8500 0.3250 0.0980], which appears as dark orange

[0.9290 0.6940 0.1250]"#EDB120"

Sample of RGB triplet [0.9290 0.6940 0.1250], which appears as dark yellow

[0.4940 0.1840 0.5560]"#7E2F8E"

Sample of RGB triplet [0.4940 0.1840 0.5560], which appears as dark purple

[0.4660 0.6740 0.1880]"#77AC30"

Sample of RGB triplet [0.4660 0.6740 0.1880], which appears as medium green

[0.3010 0.7450 0.9330]"#4DBEEE"

Sample of RGB triplet [0.3010 0.7450 0.9330], which appears as light blue

[0.6350 0.0780 0.1840]"#A2142F"

Sample of RGB triplet [0.6350 0.0780 0.1840], which appears as dark red

交互性

全部展开

可见性状态,指定为 'on''off',或者指定为数值或逻辑值 1 (true) 或 0 (false)。值 'on' 等效于 true'off' 等效于 false。因此,您可以使用此属性的值作为逻辑值。该值存储为 matlab.lang.OnOffSwitchState 类型的 on/off 逻辑值。

  • 'on' - 显示对象。

  • 'off' - 隐藏对象而不删除它。您仍然可以访问不可见 UI 组件的属性。

要使您的 App 更快地启动,请将不需要在启动时出现的所有 UI 组件的 Visible 属性设置为 'off'

工作状态,指定为 'on''off',或者指定为数值或逻辑值 1 (true) 或 0 (false)。值 'on' 等效于 true'off' 等效于 false。因此,您可以使用此属性的值作为逻辑值。该值存储为 matlab.lang.OnOffSwitchState 类型的 on/off 逻辑值。

  • 如果您将此属性设置为 'on',则 App 用户可以与组件进行交互。

  • 如果您将此属性设置为 'off',组件将灰显,指示 App 用户无法与其交互,并且它不会触发回调。

设置此属性对此类型的对象没有影响。

回调

全部展开

选定菜单时触发的回调函数,指定为下列值之一:

  • 函数句柄。

  • 第一个元素是函数句柄的元胞数组。元胞数组中的后续元素是传递到回调函数的参量。

  • 包含有效 MATLAB 表达式的字符向量(不推荐)。MATLAB 在基础工作区计算此表达式。

有关将回调属性值指定为函数句柄、元胞数组或字符向量的详细信息,请参阅Specify a Callback Function

此回调根据菜单项的位置和交互类型进行响应:

  • 左键点击菜单将展开该菜单并触发其回调。

  • 当任一菜单处于展开状态时,如果将光标在其他任何父级菜单(或顶级菜单)上暂停,将会展开该菜单并触发其回调。

注意

请勿使用回调动态更改菜单项。在回调中删除、添加和替换菜单项可能会生成空菜单。此时,可以使用 Visible 属性隐藏或显示菜单项。您还可以通过设置 Enable 属性来启用和禁用菜单项。要完全重新填充菜单项,请在回调外删除这些菜单项并重新创建。

与上下文菜单关联的菜单

当菜单组件与上下文菜单(而不是图窗窗口顶部的菜单项)相关联时,此回调函数可以访问有关用户与 App 交互的特定信息。MATLAB 将 MenuSelectedData 对象中的此信息作为第二个参量传递给回调函数。在 App 设计工具中,该参量名为 event。您可以使用圆点表示法查询对象属性。例如,event.ContextObject 返回有关用户右键点击哪个组件以打开关联的上下文菜单的信息。

注意

您可以为任何 Menu 对象指定 MenuSelectedFcn 回调。但是,回调事件数据中的 MenuSelectedData 对象仅在菜单所属的上下文菜单满足以下两个条件时才可用:

  • 上下文菜单与基于 uifigure 的 App 相关联(例如在 App 设计工具中创建的 App)。

  • 上下文菜单与 UI 组件(而不是图形对象,如 AxesLine 对象)相关联,或与仅包含 UI 组件的容器相关联。

下表列出了 MenuSelectedData 对象的属性。

属性
ContextObjectApp 用户打开上下文菜单时右键点击的对象
InteractionInformation

有关 App 用户在组件中打开上下文菜单时右键点击的位置的信息。根据 ContextObject 的值,此信息存储为具有不同属性的对象。

例如,如果 ContextObjectTable 对象,则 InteractionInformation 存储有关用户右键点击的表中的行和列的信息。有关 InteractionInformation 可以具有的属性的更多详细信息,请参阅下面的表。

Source执行回调的上下文菜单对象
EventName'MenuSelected'

下表列出了 InteractionInformation 对象的属性。这些属性取决于 App 用户打开上下文菜单时右键点击的对象。

ContextObjectInteractionInformation 属性
任一值Location

用户右键点击的位置相对于 ContextObject 的父容器左下角的位置,以 [x y] 二元素向量形式返回。

x 的值表示从父容器的左边缘到右键点击位置的水平距离。y 的值表示从父容器的下边缘到右键点击位置的垂直距离。距离的测量单位为像素。

ScreenLocation

用户右键点击的位置相对于其主显示画面左下角的位置,以 [x y] 二元素向量形式返回。

x 的值表示从显示画面左边缘到右键点击位置的水平距离。y 的值表示从显示画面的下边缘到右键点击位置的垂直距离。距离的测量单位为像素。

TableDisplayRow

用户右键点击的在表中直观显示的行,以数值标量形式返回。

如果用户没有对表进行排序,则 DisplayRow 的值与 Row 的值相同。如果用户右键点击了表 UI 组件中与行无关的区域,则 DisplayRow 为空数组。

DisplayColumn

用户右键点击的在表中直观显示的列,以数值标量形式返回。

如果用户没有重新排列表,则 DisplayColumn 的值与 Column 的值相同。如果用户右键点击了表 UI 组件中与列无关的区域,则 DisplayColumn 为空数组。

Row

用户右键点击的对应于原始表数据的行,以数值标量形式返回。

如果用户没有对表进行排序,则 Row 的值与 DisplayRow 的值相同。如果用户右键点击了表 UI 组件中与行无关的区域,则 Row 为空数组。

Column

用户右键点击的对应于原始表数据的列,以数值标量形式返回。

如果用户没有重新排列表,则 Column 的值与 DisplayColumn 的值相同。如果用户右键点击了表 UI 组件中与列无关的区域,则 Column 为空数组。

RowHeader用户是否右键点击了表的行标题,以逻辑值 0 (false) 或 1 (true) 形式返回。
ColumnHeader用户是否右键点击了表的列标题,以逻辑值 0 (false) 或 1 (true) 形式返回。
TreeNode

右键点击的节点,以 TreeNode 对象形式返回。

如果用户右键点击了树中未关联到节点的区域,则 Node 是空数组。

Level

所右键点击节点的级别,以数值标量形式返回。Tree 对象的直接父节点位于第 1 级,第 1 级节点的父节点位于第 2 级,依此类推。

如果用户右键点击了树中未关联到节点的区域,则 Level 是空数组。

ListBoxItem

右键点击的列表框项的索引,以数值标量形式返回。

如果用户右键点击了列表框中与项无关的区域,则 Item 为空数组。

对象创建函数,指定为下列值之一:

  • 函数句柄。

  • 第一个元素是函数句柄的元胞数组。元胞数组中的后续元素是传递到回调函数的参量。

  • 包含有效 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 都会确定回调中断行为。这些命令包括 drawnowfigureuifiguregetframewaitforpause

如果运行中回调不包含上述命令之一,则不会发生中断。MATLAB 首先完成执行运行中回调,然后执行中断回调。

如果运行中回调确实包含上述命令之一,则由运行中回调所属对象的 Interruptible 属性来确定是否发生中断:

  • 如果 Interruptible 的值为 'off',则不会发生中断。此时,由中断回调所属对象的 BusyAction 属性确定中断回调是被丢弃还是添加到回调队列中。

  • 如果 Interruptible 的值为 'on',则发生中断。下次 MATLAB 处理回调队列时,它会停止运行中回调的执行,并执行中断回调。在中断回调完成后,MATLAB 将继续执行运行中回调。

注意

回调的中断和执行在以下情况下会有不同的表现:

  • 如果中断回调是 DeleteFcnCloseRequestFcnSizeChangedFcn 回调,则无论是否存在 Interruptible 属性值都会发生中断。

  • 如果运行中回调当前正在执行 waitfor 函数,则无论是否存在 Interruptible 属性值都会发生中断。

  • 如果中断回调由 Timer 对象所有,则回调将根据调度执行,而不考虑 Interruptible 属性值。

注意

发生中断时,MATLAB 不保存属性状态或显示内容。例如,gcagcf 命令返回的对象可能会在另一个回调执行时发生改变。

回调排队,指定为 'queue''cancel'BusyAction 属性决定 MATLAB 如何处理中断回调的执行。有以下两种回调状态要考虑:

  • 运行中回调是当前正在执行的回调。

  • 中断回调是试图中断运行中回调的回调。

BusyAction 属性仅在同时满足以下两个条件时才确定回调排队行为:

在这些情况下,由中断回调所属对象的 BusyAction 属性确定 MATLAB 如何处理中断回调。以下是 BusyAction 属性的可能值:

  • 'queue' - 将中断回调放入队列中,以便在运行中回调执行完毕后进行处理。

  • 'cancel' - 不执行中断回调。

此 属性 为只读。

删除状态,以 matlab.lang.OnOffSwitchState 类型的 on/off 逻辑值形式返回。

DeleteFcn 回调开始执行时,MATLAB 会将 BeingDeleted 属性设置为 'on'BeingDeleted 属性将一直保持 'on' 设置状态,直到组件对象不再存在为止。

在查询或修改对象之前,请先检查其 BeingDeleted 属性的值,以确认它不是待删除项。

父级/子级

全部展开

父对象,指定为使用 uifigure 函数创建的 Figure 对象、另一个 Menu 对象或 ContextMenu 对象。您可以将菜单项移动到其他窗口,或者通过设置此属性将其移动到其他菜单下。将父容器指定为一个现有 Menu 对象,以将菜单项添加到菜单,或者嵌套菜单项。

菜单的子级,返回空的 GraphicsPlaceholder 或一维的 Menu 对象数组。

不能使用 Children 属性添加或删除子组件。可以使用此属性查看子级列表或对子菜单项重新排序。

要向此列表添加子菜单,请将另一个 Menu 对象的 Parent 属性设置为此 Menu 对象。

对象句柄的可见性,指定为 'on''callback''off'

此属性控制对象在其父级的子级列表中的可见性。当对象未显示在其父级的子级列表中时,通过搜索对象层次结构或查询属性来获取对象的函数不会返回该对象。这些函数包括 getfindobjclfclose。对象即使在不可见时也有效。如果可以访问某个对象,则可以设置和获取其属性,并将其传递给针对对象进行运算的任意函数。

HandleVisibility 值描述
'on'对象始终可见。
'callback'对象对于回调或回调调用的函数可见,但对于命令行调用的函数不可见。此选项阻止通过命令行访问对象,但允许回调函数访问它。
'off'对象始终不可见。该选项用于防止另一函数无意中对 UI 进行更改。将 HandleVisibility 设置为 'off' 可在执行该函数时暂时隐藏对象。

标识符

全部展开

此 属性 为只读。

图形对象的类型,以 'uimenu' 形式返回。

对象标识符,指定为字符向量或字符串标量。您可以指定唯一的 Tag 值作为对象的标识符。如果需要访问您代码中其他位置的对象,可以使用 findobj 函数基于 Tag 值搜索对象。

用户数据,指定为任何 MATLAB 数组。例如,您可以指定标量、向量、矩阵、元胞数组、字符数组、表或结构体。使用此属性存储对象上的任意数据。

如果您在 App 设计工具中工作,请在该 App 中创建公共或私有属性以共享数据,而不是使用 UserData 属性。有关详细信息,请参阅在用 App 设计工具创建的 App 内共享数据

仅限基于 uifigure 创建的 App

全部展开

注意

此属性仅对 App 设计工具中的以及使用 uifigure 函数创建的 App 中的菜单有效。

工具提示,指定为字符向量、字符向量元胞数组、字符串数组或一维分类数组。如果使用此属性,则在运行时当用户将指针悬停在组件上时,将显示消息。要显示多行文本,请指定字符向量元胞数组或字符串数组。数组中的每个元素变为一行文本。如果将此属性指定为分类数组,MATLAB 将使用数组中的值,而不是完整的类别集。

版本历史记录

在 R2006a 之前推出

全部展开