Main Content

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

uimenu

创建菜单或菜单项

说明

m = uimenu 在当前图窗中创建菜单,并返回 Menu 对象。如果没有可用的图窗,MATLAB® 将调用 figure 函数创建一个图窗。

示例

m = uimenu(Name,Value) 使用一个或多个名称-值对组参量指定菜单属性值。

m = uimenu(parent) 在指定的父容器中创建菜单。父容器可以是使用 figureuifigure 函数创建的图窗,也可以是另一个 Menu 对象。uimenu 的属性值略有不同,具体取决于该 App 是使用 figure 还是 uifigure 函数创建的。有关详细信息,请参阅名称-值参数

示例

m = uimenu(parent,Name,Value) 指定父容器和一个或多个属性值。

示例

全部折叠

创建一个显示默认菜单栏的图窗。添加一个菜单和一个菜单项。

f = figure('Toolbar','none');
m = uimenu('Text','Options');
mitem = uimenu(m,'Text','Reset');

A figure window with a menu bar. The menu items are "File", "Edit", "View", "Insert", "Tools", "Desktop", "Window", "Help", and "Options". The "Options" item is selected, and displays a drop-down with a "Reset" option.

将具有键盘快捷方式的菜单项添加到菜单栏,并定义选择该菜单项时执行的回调。

首先,创建一个名为 importmenu.m 的程序文件。在该程序文件中:

  • 创建一个图窗。

  • 添加一个名为 Import 的菜单。通过将 '&Import' 指定为文本标签,为菜单创建助记键键盘快捷方式。

  • 创建一个菜单项并指定助记键和快捷键键盘快捷方式。

  • 定义当用户点击菜单项或使用助记键或快捷键键盘快捷方式时执行的 MenuSelectedFcn 回调。

运行程序文件。

function importmenu
fig = uifigure;
m = uimenu(fig,'Text','&Import');
 
mitem = uimenu(m,'Text','&Text File');
mitem.Accelerator = 'T';
mitem.MenuSelectedFcn = @MenuSelected;
 
    function MenuSelected(src,event)
        file = uigetfile('*.txt');
    end
 
end

A menu bar with an "Import" item with a "Text File" sub-item. The "I" in "Import" and the "T" in "Text File" are underlined. The Ctrl+T keyboard shortcut is displayed to the right of the "Text File" item.

您可以使用键盘以下列方式与菜单和菜单项交互:

  • 通过按 Alt+I 选择 Import 菜单。

  • 选择 Text File 菜单项,并通过按 Alt+I+T 执行回调。

  • 选择 Text File 菜单项,并通过使用快捷键 Ctrl+T 执行回调。

当您选择 Text File 菜单项时,“选择要打开的文件”对话框打开,扩展名字段限定为文本文件。

File dialog box. The file extension filer drop-down list has the option "(*.txt.)" selected.

创建一个选中菜单项,可以选中或清除该菜单项以在坐标区上显示网格。共享具有普通按钮的回调,这样按下该普通按钮也可以显示或隐藏网格。

首先,创建一个名为 plotOptions.m 的程序文件。在该程序文件中:

  • 创建一个图窗,其中包含一个普通按钮和用于显示网格的坐标区。

  • 添加一个菜单和一个具有助记键的菜单项。指定该菜单项已选中。

  • 定义一个 MenuSelectedFcn 回调,当用户与菜单项交互时该回调会隐藏或显示网格。

  • 定义一个 ButtonPushedFcn,它与该菜单项使用相同的回调函数。

运行程序文件。

function plotOptions
fig = uifigure;
ax = uiaxes(fig);
grid(ax);
btn = uibutton(fig,'Text','Show Grid');
btn.Position = [155 325 100 20];

m = uimenu(fig,'Text','&Plot Options');
mitem = uimenu(m,'Text','Show &Grid','Checked','on');
mitem.MenuSelectedFcn = @ShowGrid;
btn.ButtonPushedFcn = @ShowGrid;

    function ShowGrid(src,event)
        grid(ax);
        if strcmp(mitem.Checked,'on')
            mitem.Checked = 'off';
        else
            mitem.Checked = 'on';
        end
    end
end

An app with a menu bar, button, and set of axes. The "Show Grid" menu item has a checked check box to the left of the text.

输入参数

全部折叠

父容器,指定为使用 figureuifigure 函数创建的 Figure 对象、另一个 ContextMenu 对象或 Menu 对象。如果未指定父容器,则 MATLAB 调用 figure 以创建一个父容器,并将菜单放在该图窗的菜单栏中。将父容器指定为一个现有 Menu 对象,以将菜单项添加到菜单,或者嵌套菜单项。

名称-值参数

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

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

示例: m = uimenu('Text','Open') 创建菜单将其标签设置为 'Open'

注意

此处所列的属性只是可用属性中的一部分。有关完整列表,请参阅 Menu 属性

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

避免使用以下区分大小写的保留字:'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'

    • 其加速值尚未分配给同一 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 对象)相关联。

下表列出了 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 为空数组。

分隔线模式,指定为 '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 属性:

  • 顶级菜单项

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

版本历史记录

在 R2006a 之前推出