class QMenu#

QMenu 类提供了菜单小部件,用于在菜单栏、上下文菜单和其他弹出菜单中使用。 更多信息

Inheritance diagram of PySide6.QtWidgets.QMenu

概述#

属性#

方法#

虚方法#

信号#

静态函数#

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译存在问题,您也可以通过在https:/bugreports.qt.io/projects/PYSIDE 上创建工单来告知我们。

详细描述#

../../_images/fusion-menu.png

菜单小部件是一个选择菜单。它可以是菜单栏中的下拉菜单或者独立的上下文菜单。在下拉菜单中,当用户单击相应项目或按下指定的快捷键时,菜单栏会显示它们。《a class="reference internal" href="QMenuBar.html#PySide6.QtWidgets.QMenuBar.addMenu" title="PySide6.QtWidgets.QMenuBar.addMenu">addMenu() 用来将菜单插入到菜单栏。《QStyle》将其垂直表示并在其中渲染。此外,动作可以有文本标签,可选的图标位于非常左侧,以及“Ctrl+X”之类的快捷键序列。

动作#

菜单由动作项列表组成。动作使用 addAction(), addActions()insertAction() 函数添加。动作由 QStyle 渲染。此外,动作可以有文本标签、可选的图标和快捷键序列(如“Ctrl+X”)。

现有动作可以通过 actions() 查找。

动作项有四种:分隔符、显示子菜单的动作、小部件和执行动作的动作。分隔符用 addSeparator() 添加,子菜单用 addMenu() 添加,其他所有条目均视为动作项。

插入动作项时,通常需要指定接收器和槽位。每次调用触发器()时,接收器都将收到通知。此外,《QMenu》提供了两个信号, QMenutriggered()hovered() ,这些信号指示从菜单触发的动作。

使用 clear() 清除菜单,使用 removeAction() 删除单个动作项。

一个 QMenu 也可以提供一个可撕式菜单。可撕式菜单是一个包含菜单副本的顶级窗口。这使得用户能够“撕下”常用的菜单并将它们放置在屏幕上的方便位置。如果您想要为特定菜单启用此功能,可以使用 setTearOffEnabled() 方法插入撕口处理。在使用撕口菜单时,请注意,Microsoft Windows上通常不使用此概念,所以一些用户可能不熟悉它。考虑使用 QToolBar 代替。

可以使用 QWidgetAction 类将小部件插入到菜单中。该类的实例用于保存小部件,并通过添加一个带有 QAction 的 addAction() 重载将它插入菜单。如果QWidgetAction 触发了 triggered() 信号,则菜单将关闭。

警告

要使 QMenu 在屏幕上可见,应使用 exec()popup() 方法而不是 show()setVisible() 方法。要隐藏或禁用在菜单栏中的菜单或在将其添加为子菜单的其他菜单中,请使用相应的 menuAction() 属性。

macOS上的Qt使用Cocoa构建的QMenu#

QMenu 只能插入到菜单/菜单栏中一次。随后的插入不会有任何效果或会生成一个无效的菜单项。

有关如何在您的应用程序中使用QMenuBarQMenu 的示例,请参阅菜单 示例。

重要继承函数: addAction() , removeAction()clear()addSeparator() ,和 addMenu()

注意

当使用 from __feature__ import true_property 时,可以直接使用属性,否则通过访问函数来获取。

属性 icon: QIcon#

此属性保存菜单的图标。

这等同于 menuAction() 的 QAction::icon 属性。

默认情况下,如果没有显式设置图标,此属性将包含一个空图标。

访问函数
属性 separatorsCollapsible: bool#

此属性保存是否应折叠连续的分隔符。

此属性指定菜单中的连续分隔符是否应该视觉上折叠成一个。菜单开头或结尾的分隔符也将被隐藏。

默认情况下,此属性为 true

访问函数
属性 tearOffEnabled: bool#

此属性保存是否支持将菜单撕掉。

当为真时,菜单包含一个特殊的撕掉选项(通常显示在菜单顶部的虚线),当触发时它将创建菜单的一个副本。

这个“撕掉”的副本位于一个单独的窗口中。它包含与原始菜单相同的菜单项,除了撕掉手柄。

默认情况下,此属性为 false

访问函数
属性 title: str#

此属性保存菜单的标题。

这相当于 menuAction() 的 QAction::text 属性。

默认情况下,此属性包含一个空字符串。

访问函数
属性toolTipsVisibleᅟ: bool#

此属性包含菜单动作的提示是否可见。

此属性指定动作菜单条目是否显示其提示。

默认情况下,此属性为 false

访问函数
__init__(title[, parent=None])#
参数:
  • title – 字符串

  • parentQWidget

构建一个带有 titleparent 的菜单。

虽然弹出式菜单始终是一个顶层小部件,但如果传递了父级,则在销毁该父级时将删除弹出式菜单(与其他 QObject 一样)。

参见

title

__init__([parent=None])
参数:

parentQWidget

使用父级 parent 构建一个菜单。

虽然弹出式菜单始终是一个顶层小部件,但如果传递了父级,则在销毁该父级时将删除弹出式菜单(与其他 QObject 一样)。

aboutToHide()#

当用户隐藏菜单之前,会发出此信号。

aboutToShow()#

当用户显示菜单之前,会发出此信号。

actionAt(arg__1)#
参数:

arg__1QPoint

返回类型:

QAction

返回 pt 位置的项;如果没有项,则返回 None

actionGeometry(arg__1)#
参数:

arg__1QAction

返回类型:

QRect

返回操作 act 的几何形状。

activeAction()#
返回类型:

QAction

返回当前突出显示的操作,如果没有操作被突出显示,则返回 None

addAction(arg__1, text, arg__3[, shortcut=0])#
参数:
addAction(text, arg__2[, shortcut=0])
参数:
  • text – 字符串

  • arg__2 – 对象

  • shortcutQKeySequence

addAction(icon, text, receiver, member, shortcut)
参数:
返回类型:

QAction

注意

此函数已弃用。

请使用 addAction (icon, text, shortcut, receiver, member) 替代。

addAction(text, receiver, member, shortcut)
参数:
返回类型:

QAction

注意

此函数已弃用。

请使用 QWidget::addAction(text, shortcut, receiver, member) 替代。

addMenu(menu)#
参数:

menuQMenu

返回类型:

QAction

此便利函数将 menu 作为子菜单添加到此菜单中。它返回 menumenuAction() 。此菜单不拥有 menu

addMenu(icon, title)
参数:
  • iconQIcon

  • title – 字符串

返回类型:

QMenu

将带有图标和标题的新QMenu添加到菜单中。该菜单将接管菜单的所有权。返回新的菜单。

addMenu(title)
参数:

title – 字符串

返回类型:

QMenu

将带有标题的新QMenu添加到菜单中。该菜单将接管菜单的所有权。返回新的菜单。

addSection(icon, text)#
参数:
  • iconQIcon

  • text – 字符串

返回类型:

QAction

这个便利函数创建了一个新的部分操作,即一个QAction::isSeparator()返回true的操作,同时也有texticon提示,并将这个新操作添加到这个菜单的动作列表中。它返回新创建的操作。

提示的渲染是样式和平台相关的。小部件样式可以使用渲染部分的文本和图标信息,或者可以选择忽略它们并将部分渲染成简单的分隔符。

QMenu将获取返回的QAction的所有权。

参见

addAction()

addSection(text)
参数:

text – 字符串

返回类型:

QAction

这个便利函数创建了一个新的部分操作,即一个QAction::isSeparator()返回true的操作,同时也有text提示,并将这个新操作添加到这个菜单的动作列表中。它返回新创建的操作。

提示的渲染是样式和平台相关的。小部件样式可以使用渲染部分的文本信息,或者可以选择忽略它并将部分渲染成简单的分隔符。

QMenu将获取返回的QAction的所有权。

参见

addAction()

addSeparator()#
返回类型:

QAction

这个便利函数创建了一个新的分隔符操作,即一个QAction::isSeparator()返回true的操作,并将这个新操作添加到这个菜单的动作列表中。它返回新创建的操作。

QMenu将获取返回的QAction的所有权。

参见

addAction()

clear()#

移除菜单中的所有动作。菜单拥有的、在任何其他小部件中未显示的动作将被删除。

columnCount()#
返回类型:

int

如果菜单无法适应屏幕,它会自行调整布局以适应。布局的具体含义是依赖于样式的(例如,在Windows上,它将使用多列)。

这个函数返回所需的列数。

defaultAction()#
返回类型:

QAction

返回当前默认操作。

exec()#
返回类型:

QAction

警告

本节包含自动从C++转换为Python的代码片段,可能包含错误。

同步执行此菜单。

这等价于 exec(pos())

这返回弹出式菜单或其子菜单中触发的事件操作QAction,如果没有项被触发(通常是因为用户按下了Esc),则返回None

在大多数情况下,您需要自己指定位置,例如,当前鼠标位置

exec(QCursor.pos())

或与小部件对齐

exec(somewidget.mapToGlobal(QPoint(0,0)))

或响应QMouseEvent *e

exec(e.globalPos())
静态 exec(actions, pos[, at=None[, parent=None]])
参数:
返回类型:

QAction

警告

本节包含自动从C++转换为Python的代码片段,可能包含错误。

这是一个重载函数。

同步执行菜单。

菜单的操作由actions列表指定。菜单会弹出,使得指定的操作at出现在全局位置pos处。如果没有指定at,则菜单在位置pos处弹出。parent是菜单的父小部件;指定父部件可以在仅指定位置pos不足以确定菜单应放在何处(例如,具有多个桌面或当父部件嵌入在QGraphicsView中时)时提供上下文。

函数返回弹出式菜单或其子菜单中触发的事件操作QAction,如果没有项被触发(通常是因为用户按下了Esc),则返回None

这等价于

menu = QMenu()
at = actions[0] # Assumes actions is not empty
for a in actions:
    menu.addAction(a)
menu.exec(pos, at)
exec(pos[, at=None])
参数:
返回类型:

QAction

警告

本节包含自动从C++转换为Python的代码片段,可能包含错误。

这是一个重载函数。

同步执行此菜单。

弹出一个菜单,以便操作 action 出现在指定的 全局 位置 p。要将小部件的局部坐标转换为全局坐标,请使用 mapToGlobal()

这返回弹出式菜单或其子菜单中触发的事件操作QAction,如果没有项被触发(通常是因为用户按下了Esc),则返回None

请注意,所有信号都按常规发出。如果您将 QAction 连接到槽并将其菜单的 exec() 调用,则您将同时通过信号-槽连接和在 exec() 返回值中获取结果。

常见的用法是将菜单定位在当前鼠标位置。

exec(QCursor.pos())

或与小部件对齐

exec(somewidget.mapToGlobal(QPoint(0, 0)))

或响应QMouseEvent *e

exec(e.globalPos())

当使用 exec()popup() 定位菜单时,请记住您不能依赖于菜单当前的 size()。出于性能原因,菜单仅在必要时才调整其大小。因此,在许多情况下,显示前后的尺寸不同。相反,请使用 sizeHint(),它会根据菜单当前的内容计算正确的大小。

exec_()#
返回类型:

QAction

exec_(arg__1, arg__2[, at=None[, parent=None]])
参数:
返回类型:

QAction

exec_(arg__1[, action=None])
参数:
返回类型:

QAction

hideTearOffMenu()#

此函数将强制隐藏已撕离的菜单,使其在用户的桌面上消失。

hovered(action)#
参数:

actionQAction

当菜单操作被突出显示时,发出此信号;action 是导致信号发出的操作。

常用作更新状态信息。

icon()#
返回类型:

QIcon

参见

setIcon()

属性的获取器 icon .

initStyleOption(option, action)#
参数:

使用此菜单的值和 action 的信息来初始化 option。此方法对于子类来说很有用,当它们需要使用 QStyleOptionMenuItem,但不想填写所有信息时。

insertMenu(before, menu)#
参数:
返回类型:

QAction

此便利函数将 menu 插入在动作 before 之前,并返回菜单的 menuAction() .

insertSection(before, icon, text)#
参数:
返回类型:

QAction

此便利函数创建一个新的标题动作,即具有 QAction::isSeparator() 返回 true 的动作,同时也具有 texticon 提示的动作。此函数将新创建的动作插入到菜单的动作列表中,在动作 before 之前,并返回它。

提示的渲染是样式和平台相关的。小部件样式可以使用渲染部分的文本和图标信息,或者可以选择忽略它们并将部分渲染成简单的分隔符。

QMenu将获取返回的QAction的所有权。

insertSection(before, text)
参数:
  • beforeQAction

  • text – 字符串

返回类型:

QAction

此便捷函数创建一个新的标题动作,即QAction::isSeparator()返回true的动作,同时也具有text提示。函数将新创建的动作插入到该菜单的动作列表中,在动作before之前,并返回它。

提示的渲染是样式和平台相关的。小部件样式可以使用渲染部分的文本信息,或者可以选择忽略它并将部分渲染成简单的分隔符。

QMenu将获取返回的QAction的所有权。

insertSeparator(before)#
参数:

beforeQAction

返回类型:

QAction

此便捷函数创建一个新的分隔符动作,即QAction::isSeparator()返回true的动作。函数将新创建的动作插入到该菜单的动作列表中,在动作before之前,并返回它。

QMenu将获取返回的QAction的所有权。

isEmpty()#
返回类型:

bool

如果菜单中没有插入可见的动作,返回true,否则返回false。

参见

actions()

isTearOffEnabled()#
返回类型:

bool

属性tearOffEnabled的获取器。

isTearOffMenuVisible()#
返回类型:

bool

当菜单被撕裂时,会显示一个第二菜单来在新窗口中显示菜单内容。当菜单处于此模式且可见时返回true,否则返回false。

menuAction()#
返回类型:

QAction

返回与该菜单关联的动作。

static menuInAction(action)#
参数:

actionQAction

返回类型:

QMenu

返回包含action的菜单,如果action不包含菜单,则返回None

在窗口应用程序中,包含菜单的动作可以用来创建带有子菜单的菜单项,或者插入到工具栏中创建带有弹出菜单的按钮。

popup(pos[, at=None])#
参数:

显示菜单,使操作atAction位于指定的全局位置p。要将小部件的局部坐标转换为全局坐标,请使用mapToGlobal()

当使用exec()或popup()定位菜单时,请注意,您不能依赖于菜单当前的size()。出于性能考虑,菜单仅在必要时调整其大小,因此在很多情况下,显示前后的大小不同。相反,请使用sizeHint(),它将根据菜单的当前内容计算出适当的大小。

separatorsCollapsible()#
返回类型:

bool

属性separatorsCollapsible的获取器。

setActiveAction(act)#
参数:

actQAction

将当前突出显示的操作设置为act

setDefaultAction(arg__1)#
参数:

arg__1QAction

这将为act设置默认操作。默认操作可能会有视觉提示,这取决于当前的QStyle。默认操作通常表示当发生拖放时将发生什么。

setIcon(icon)#
参数:

iconQIcon

参见

icon()

属性icon的设置器。

setSeparatorsCollapsible(collapse)#
参数:

collapse – bool

属性separatorsCollapsible的设置器。

setTearOffEnabled(arg__1)#
参数:

arg__1 – 布尔值

用于设置属性 tearOffEnabled .

setTitle(title)#
参数:

title – 字符串

参见

title()

用于设置属性 title .

setToolTipsVisible(visible)#
参数:

visible – 布尔值

用于设置属性 toolTipsVisible .

showTearOffMenu()#

这是一个重载函数。

这个函数将强制显示撕开的菜单,使其出现在用户鼠标光标下的桌面上。

showTearOffMenu(pos)
参数:

posQPoint

这个函数将强制显示撕开的菜单,使其出现在用户指定全局位置的桌面上。

title()#
返回类型:

str

参见

setName()

获取属性 title 的值。

toolTipsVisible()#
返回类型:

bool

获取属性 toolTipsVisible 的值。

triggered(action)#
参数:

actionQAction

当这个菜单中的某个动作被触发时,会发出这个信号。

action 是导致信号发出的动作。

通常,您会将每个菜单动作的 triggered() 信号连接到其自己的自定义槽,但有时您会想要将多个动作连接到单个槽,例如,当您有一组紧密相关的动作时,例如“左对齐”、“居中”、“右对齐”。

注意

此信号在层次结构中的主父菜单处发出。因此,只需将父菜单连接到槽;子菜单无需连接。