Main Content

为使用 GUIDE 创建的 App 创建菜单

注意

在以后的版本中将会删除 GUIDE 环境。在删除 GUIDE 后,使用 GUIDE 创建的现有 App 可以继续在 MATLAB® 中运行,但不能在 GUIDE 中对其进行编辑。

要继续编辑使用 GUIDE 创建的现有 App,请参阅 GUIDE 迁移策略,了解有关如何帮助保持该 App 与未来 MATLAB 版本的兼容性的信息。要以交互方式创建新 App,请改用使用 App 设计工具开发 App

您可以使用 GUIDE 来创建菜单栏(包含下拉菜单)以及附加到组件的上下文菜单。您可以使用菜单编辑器来创建这两种类型的菜单。从工具菜单访问菜单编辑器,或点击菜单编辑器按钮

菜单栏中的菜单

创建下拉菜单时,GUIDE 会将其标题添加到菜单栏中。然后可以创建该菜单的菜单项。每个菜单项可以包含一个级联菜单,也称为子菜单,并且这些菜单项还可以包含级联菜单,以此类推。

菜单对图窗停靠的影响

默认情况下,使用 GUIDE 创建 UI 时,不会为该 UI 创建菜单栏。您的 UI 可能不需要菜单,但如果您希望用户能够停靠或取消停靠 UI 窗口,则必须包含菜单栏或工具栏。这是因为,停靠受停靠图标控制,而该图标是一个位于菜单栏或工具栏右上角的小弯箭头,如下图所示。

包含标准菜单栏的图窗窗口还有一个桌面菜单,用户可从该菜单停靠和取消停靠图窗窗口。

要显示停靠箭头和桌面 > 停靠图窗菜单项,请使用属性检查器将图窗属性 DockControls 设为 'on'。还必须将 MenuBar 和/或 ToolBar 图窗属性设为 'figure',以显示停靠控件。

WindowStyle 图窗属性还会影响停靠行为。默认值为 'normal',但如果将其更改为 'docked',则会发生以下情况:

  • 运行 UI 窗口时,该窗口将会打开并停靠在桌面上。

  • DockControls 属性被设为 'on',并且无法关闭,除非 WindowStyle 不再设为 'docked'

  • 如果取消停靠使用 WindowStyle 'docked' 创建的 UI 窗口,则除非图窗显示菜单栏或工具栏(标准或自定义),否则窗口将不会包含停靠箭头。当窗口不含停靠箭头时,用户可以从桌面将其取消停靠,但无法将其重新停靠到该位置。

不过,当您使用 GUIDE 提供自己的菜单栏或工具栏时,如果希望 UI 窗口可以停靠,它可能会显示停靠箭头。

注意

模态对话框 UI(将 WindowStyle 设为 'modal' 的图窗)不能包含菜单栏、工具栏或停靠控件。

有关详细信息,请参阅 Figure 属性 中的 DockControlsMenuBarToolBarWindowStyle 属性说明。

在菜单栏中添加标准菜单

图窗的 MenuBar 属性用于控制 UI 是否在菜单栏上显示 MATLAB 标准菜单。GUIDE 最初将 MenuBar 的值设为 none。如果您希望 UI 显示 MATLAB 标准菜单,请使用属性检查器将 MenuBar 设为 figure

  • 如果 MenuBar 的值为 none,则 GUIDE 会自动添加一个菜单栏,其中仅显示您所创建的菜单。

  • 如果 MenuBar 的值为 figure,则 UI 将显示 MATLAB 标准菜单,并且 GUIDE 会将您所创建的菜单添加到菜单栏的右侧。

两种情况下,用户都可以通过将图窗的 DockControls 属性设为 'on' 来停靠和取消停靠窗口。

创建菜单

  1. 通过点击工具栏中的“新建菜单”按钮开始创建一个新菜单。菜单标题 Untitled 1 随即显示在对话框的左侧窗格中。

    默认情况下,GUIDE 会在打开菜单编辑器时选中菜单栏选项卡。

  2. 点击菜单标题,以便在右侧窗格中显示菜单属性选项。

  3. 填充菜单的文本标记字段。例如,将文本设为 File,将标记设为 file_menu。点击字段外部,使更改生效。

    文本是菜单项的文本标签。要在标签中显示 & 字符,请使用两个 & 字符。removedefaultfactory(区分大小写)为保留词语。要将上述词语之一用作标签,请在词语前面加一个反斜杠字符 (\)。例如,输入 \remove 将得到 remove

    标记是用作菜单对象标识符的字符向量。它在代码中用于标识菜单项,因此在代码文件中必须是唯一的。

在菜单中添加菜单项

使用新建菜单项工具创建显示在下拉菜单中的菜单项。

  1. 通过选择 File 然后点击工具栏中的新建菜单项,在 File 下面添加一个 Open 菜单项。随即显示一个临时编号的菜单项标签 Untitled

  2. 填充新菜单项的文本标记字段。例如,将文本设为Open,将标记设为 menu_file_open。点击字段外部,使更改生效。

也可以

  • 使用快捷键弹出式菜单为菜单项选择字母键盘快捷键。与 Ctrl 组合使用,是不含子菜单的菜单项的键盘等效键。请注意,在您的系统中,有些快捷键可能被用于其他用途,并且可能导致其他操作。

  • 通过选中在此菜单项上方放置分隔线,在菜单项上面显示分隔线。

  • 通过选中在此菜单项前添加复选标记,在首次打开菜单时菜单项的旁边会显示复选标记。选中标记指示菜单项的当前状态。请参阅在上下文菜单中添加菜单项中的示例。

  • 通过选中启用此项,在首次打开菜单时启用此菜单项。这允许用户在首次打开菜单时选中此菜单项。如果清除此选项,则在首次打开菜单时,菜单项将会灰显,用户无法将其选中。

  • 指定在用户选择菜单项时执行的回调函数。如果尚未保存 UI,则默认值为 %automatic。在保存 UI 时,如果未更改此字段,GUIDE 将自动使用标记字段和 UI 文件名的组合来设置该值。有关指定此字段以及以编程方式编写菜单项的详细信息,请参阅菜单项

    视图按钮会在编辑器中显示回调(如果有)。如果尚未保存 UI,GUIDE 将会提示您保存。

  • 通过点击更多属性按钮打开属性检查器,您可在其中更改所有菜单属性。有关这些属性的详细信息,请参阅 Menu 属性

有关编程信息和基本示例,请参阅菜单项如何更新菜单项复选标记

更多下拉菜单

要创建更多下拉菜单,请使用“新建菜单”按钮,方法与创建 File 菜单相同。例如,以下图窗还显示了一个 Edit 下拉菜单。

级联菜单

要创建级联菜单,请选中将用作级联菜单标题的菜单项,然后点击新建菜单项按钮。在以下示例中,Edit 为级联菜单。

有关以编程方式编写菜单项的信息,请参阅菜单项

以下菜单编辑器图显示了为图窗菜单栏定义的三个菜单。

在运行 App 时,菜单标题将会显示在菜单栏中。

上下文菜单

如果为对象定义了上下文菜单,则当用户右键点击该对象时,将显示该上下文菜单。利用菜单编辑器,可以定义上下文菜单,并将其与布局中的对象关联。该过程包含三个步骤:

有关定义一般菜单的信息,请参阅菜单栏中的菜单。有关为菜单定义局部回调函数的信息,请参阅菜单项

创建父菜单

上下文菜单中的所有项都是未在图窗菜单栏中显示的菜单的子项。要定义父菜单,请执行以下操作:

  1. 选择菜单编辑器的上下文菜单选项卡,然后从工具栏中选择“新建上下文菜单”按钮。

  2. 选择菜单,并在标记字段中键入上下文菜单标记(在此示例中为 axes_context_menu)。

在上下文菜单中添加菜单项

使用“新建菜单项”按钮创建显示在上下文菜单中的菜单项。

  1. 通过选择 axes_context_menu 并点击新建菜单项工具,添加一个蓝色背景颜色的菜单项。随即显示一个临时编号的菜单项标签 Untitled

  2. 填充新菜单项的文本标记字段。例如,将文本设为 Blue background color,将标记设为 blue_background。点击字段外部,使更改生效。

也可以采用以下方法修改菜单项:

  • 通过选中在此菜单项上方放置分隔线,在菜单项上面显示分隔线。

  • 通过选中在此菜单项前添加复选标记,在首次打开菜单时菜单项的旁边会显示复选标记。选中标记指示菜单项的当前状态。请参阅在上下文菜单中添加菜单项中的示例。有关代码示例,请参阅如何更新菜单项复选标记

  • 通过选中启用此项,在首次打开菜单时启用此菜单项。这允许用户在首次打开菜单时选中此菜单项。如果清除此选项,则在首次打开菜单时,菜单项将会灰显,用户无法将其选中。

  • 为菜单指定回调,用于执行与菜单项关联的操作。如果尚未保存 UI,则默认值为 %automatic。在保存 UI 时,如果尚未更改此字段,GUIDE 将会自动使用标记字段和 UI 文件名的组合,在代码文件中创建回调。回调名称不会显示在菜单编辑器的回调字段中,但选择菜单项会触发回调。

    也可以在回调字段中键入命令。它可以是任意有效的 MATLAB 表达式或命令。例如,此命令

    set(gca, 'Color', 'y')
    将当前坐标区背景色设为黄色。但是,执行此操作的首选方法是将回调置于代码文件中。这将避免使用 gca,因为当存在多个图窗或坐标区时,该函数不一定总是可靠。以下是一个在代码文件中以函数形式编写的此回调的版本:
    function axesyellow_Callback(hObject, eventdata, handles)
    % hObject    handle to axesyellow (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    set(handles.axes1,'Color','y')
    不论将上下文菜单附加到哪个对象,此代码都将为 axes1 标记的坐标区设置背景色。

    如果在菜单编辑器中输入了回调值,它将覆盖代码文件中已保存的菜单项回调。如果删除了在回调字段中输入的值,则当用户在 UI 中选中该菜单项时,系统将执行该菜单项在代码文件中的回调。

    有关指定此字段以及以编程方式编写菜单项的详细信息,请参阅菜单项

    视图按钮会在编辑器中显示回调(如果有)。如果尚未保存 UI,GUIDE 将会提示您保存。

  • 点击更多属性按钮打开属性检查器,可在其中更改除回调以外的其他所有菜单属性。有关这些属性的详细信息,请参阅 ContextMenu 属性

将上下文菜单与对象关联

  1. 在布局编辑器中,选择要为其定义上下文菜单的对象。

  2. 使用属性检查器,将此对象的 ContextMenu 属性设为所需上下文菜单的名称。

以下图窗显示了 Tag 属性为 axes1axes 对象的 ContextMenu 属性。

在代码文件中,完成上下文菜单中每个菜单项的局部回调函数。每个回调将在用户选择关联的上下文菜单项时执行。有关定义语法的信息,请参阅菜单项

请参阅如何更新菜单项复选标记了解编程信息和基本示例。

相关主题