PySide6.QtWidgets.QMenu

class QMenu

QMenu 类提供了一个菜单小部件,用于菜单栏、上下文菜单和其他弹出菜单。更多

PySide6.QtWidgets.QMenu 的继承图

概要

属性

方法

虚拟方法

信号

静态函数

注意

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

详细描述

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

菜单小部件是一个选择菜单。它可以是菜单栏中的下拉菜单,也可以是独立的上下文菜单。当用户点击相应的项目或按下指定的快捷键时,菜单栏会显示下拉菜单。使用addMenu()将菜单插入菜单栏。上下文菜单通常通过某些特殊的键盘键或右键点击来调用。它们可以异步执行,使用popup(),或同步执行,使用exec()。菜单也可以响应按钮按下而调用;这些菜单与上下文菜单类似,只是调用方式不同。

操作

菜单由一系列操作项组成。操作通过addAction()、addActions()insertAction()函数添加。操作以垂直方式表示,并由QStyle渲染。此外,操作可以有一个文本标签,一个可选的图标绘制在最左侧,以及快捷键序列,如“Ctrl+X”。

菜单中现有的操作可以通过actions()找到。

有四种类型的操作项:分隔符、显示子菜单的操作、小部件和执行操作的操作。分隔符通过addSeparator()插入,子菜单通过addMenu()插入,所有其他项都被视为操作项。

在插入操作项时,您通常需要指定一个接收者和一个槽。每当项目被触发时,接收者将被通知。此外,QMenu 提供了两个信号,triggered()hovered(),这些信号表示从菜单中触发的 QAction。

你可以使用clear()清除菜单,并使用removeAction()移除单个操作项。

一个QMenu也可以提供一个可撕下的菜单。可撕下的菜单是一个包含菜单副本的顶级窗口。这使得用户可以将常用的菜单“撕下”并将其放置在屏幕上的方便位置。如果你希望某个特定菜单具有此功能,可以使用setTearOffEnabled()插入一个可撕下手柄。在使用可撕下菜单时,请记住这个概念在Microsoft Windows上通常不使用,因此一些用户可能不熟悉它。考虑使用QToolBar代替。

可以使用QWidgetAction类将小部件插入菜单中。此类的实例用于保存小部件,并通过接受QAction的addAction()重载插入菜单中。如果QWidgetAction触发triggered()信号,菜单将关闭。

警告

为了使QMenu在屏幕上可见,应使用exec()popup(),而不是show()setVisible()。要隐藏或禁用菜单栏中的菜单,或作为子菜单添加到另一个菜单中的菜单,请使用menuAction()的相应属性。

在macOS上使用Qt构建的QMenu与Cocoa

QMenu 只能在菜单/菜单栏中插入一次。后续的插入将不会产生任何效果,或者会导致菜单项被禁用。

查看菜单示例,了解如何在您的应用程序中使用QMenuBarQMenu

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

另请参阅

QMenuBar 菜单示例

注意

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

property iconᅟ: QIcon

此属性保存菜单的图标。

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

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

Access functions:
property separatorsCollapsibleᅟ: bool

此属性用于确定是否应折叠连续的分离器。

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

默认情况下,此属性为 true

Access functions:
property tearOffEnabledᅟ: bool

此属性表示菜单是否支持被撕下。

当为true时,菜单包含一个特殊的分离项(通常在菜单顶部显示为虚线),当触发时,它会创建菜单的副本。

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

默认情况下,此属性为 false

Access functions:
property titleᅟ: str

此属性保存菜单的标题。

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

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

Access functions:
property toolTipsVisibleᅟ: bool

此属性决定菜单操作的工具提示是否应可见。

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

默认情况下,此属性为 false

Access functions:
__init__([parent=None])
Parameters:

父级QWidget

构建一个带有父级 parent 的菜单。

尽管弹出菜单始终是一个顶级小部件,但如果传递了父对象,当该父对象被销毁时,弹出菜单将被删除(与任何其他QObject一样)。

__init__(title[, parent=None])
Parameters:
  • 标题 – str

  • parentQWidget

构建一个带有titleparent的菜单。

尽管弹出菜单始终是一个顶级小部件,但如果传递了父对象,当该父对象被销毁时,弹出菜单将被删除(与任何其他QObject一样)。

另请参阅

title

aboutToHide()

此信号在菜单即将对用户隐藏之前发出。

另请参阅

aboutToShow() hide()

aboutToShow()

此信号在菜单显示给用户之前发出。

另请参阅

aboutToHide() show()

actionAt(pt)
Parameters:

ptQPoint

Return type:

QAction

返回位于pt处的项目;如果该位置没有项目,则返回None

actionGeometry(act)
Parameters:

actQAction

Return type:

QRect

返回动作 act 的几何形状。

activeAction()
Return type:

QAction

返回当前高亮的操作,如果没有操作被高亮,则返回None

另请参阅

setActiveAction()

addAction(text, arg__2[, shortcut=0])
Parameters:
  • 文本 – str

  • arg__2 – 对象

  • 快捷键QKeySequence

addAction(arg__1, text, arg__3[, shortcut=0])
Parameters:
addAction(text, receiver, member, shortcut)
Parameters:
Return type:

QAction

注意

此函数已弃用。

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

addAction(icon, text, receiver, member, shortcut)
Parameters:
Return type:

QAction

注意

此函数已弃用。

请使用 addAction (图标, 文本, 快捷键, 接收器, 成员) 代替。

addMenu(menu)
Parameters:

菜单QMenu

Return type:

QAction

这个便捷函数将menu作为子菜单添加到此菜单中。它返回menumenuAction()。此菜单不拥有menu的所有权。

另请参阅

addAction() menuAction()

addMenu(title)
Parameters:

标题 – str

Return type:

QMenu

向菜单追加一个新的QMenu,带有title。菜单拥有该菜单的所有权。返回新菜单。

另请参阅

addAction() menuAction()

addMenu(icon, title)
Parameters:
  • 图标QIcon

  • 标题 – str

Return type:

QMenu

向菜单添加一个新的QMenu,带有icontitle。菜单将拥有该菜单的所有权。返回新菜单。

另请参阅

addAction() menuAction()

addSection(text)
Parameters:

文本 – str

Return type:

QAction

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

提示的渲染取决于样式和平台。小部件样式可以在渲染部分时使用文本信息,或者选择忽略它并将部分渲染为简单的分隔符。

QMenu 拥有返回的 QAction 的所有权。

另请参阅

addAction()

addSection(icon, text)
Parameters:
  • 图标QIcon

  • 文本 – str

Return type:

QAction

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

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

QMenu 拥有返回的 QAction 的所有权。

另请参阅

addAction()

addSeparator()
Return type:

QAction

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

QMenu 拥有返回的 QAction 的所有权。

另请参阅

addAction()

clear()

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

另请参阅

removeAction()

columnCount()
Return type:

整数

如果菜单不适合屏幕显示,它会自动调整布局以适应屏幕。布局的具体形式取决于样式(例如,在Windows上,它将使用多列)。

此函数返回所需的列数。

defaultAction()
Return type:

QAction

返回当前的默认操作。

另请参阅

setDefaultAction()

exec()
Return type:

QAction

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

同步执行此菜单。

这相当于 exec(pos())

这将返回在弹出菜单或其子菜单中触发的QAction,如果没有触发任何项目(通常是因为用户按下了Esc键),则返回None

在大多数情况下,您会希望自己指定位置,例如,当前鼠标位置:

exec(QCursor.pos())

或对齐到一个小部件:

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

或者作为对 QMouseEvent *e 的响应:

exec(e.globalPosition().toPoint())
exec(pos[, at=None])
Parameters:
Return type:

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.globalPosition().toPoint())

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

另请参阅

popup() mapToGlobal()

static exec(actions, pos[, at=None[, parent=None]])
Parameters:
Return type:

QAction

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

这是一个重载函数。

同步执行一个菜单。

菜单的操作由actions列表指定。菜单将弹出,以便指定的操作at出现在全局位置pos。如果未指定at,则菜单将出现在位置posparent是菜单的父部件;指定父部件将在仅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)

另请参阅

popup() mapToGlobal()

exec_()
Return type:

QAction

exec_(arg__1[, action=None])
Parameters:
Return type:

QAction

exec_(arg__1, arg__2[, at=None[, parent=None]])
Parameters:
Return type:

QAction

hideTearOffMenu()

此函数将强制隐藏被撕下的菜单,使其从用户的桌面上消失。

hovered(action)
Parameters:

动作QAction

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

通常用于更新状态信息。

另请参阅

triggered() hovered()

icon()
Return type:

QIcon

另请参阅

setIcon()

属性 iconᅟ 的获取器。

initStyleOption(option, action)
Parameters:

使用此菜单中的值和action中的信息初始化option。当子类需要一个QStyleOptionMenuItem但不想自己填写所有信息时,此方法非常有用。

insertMenu(before, menu)
Parameters:
Return type:

QAction

这个便捷函数在操作 before 之前插入 menu 并返回菜单 menuAction()

另请参阅

insertAction() addMenu()

insertSection(before, text)
Parameters:
  • 之前QAction

  • 文本 – str

Return type:

QAction

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

提示的渲染取决于样式和平台。小部件样式可以在渲染部分时使用文本信息,或者选择忽略它并将部分渲染为简单的分隔符。

QMenu 拥有返回的 QAction 的所有权。

insertSection(before, icon, text)
Parameters:
Return type:

QAction

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

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

QMenu 拥有返回的 QAction 的所有权。

insertSeparator(before)
Parameters:

之前QAction

Return type:

QAction

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

QMenu 拥有返回的 QAction 的所有权。

isEmpty()
Return type:

布尔

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

另请参阅

actions()

isTearOffEnabled()
Return type:

布尔

属性 tearOffEnabledᅟ 的获取器。

isTearOffMenuVisible()
Return type:

布尔

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

menuAction()
Return type:

QAction

返回与此菜单关联的操作。

static menuInAction(action)
Parameters:

动作QAction

Return type:

QMenu

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

在小部件应用程序中,包含菜单的操作可用于创建带有子菜单的菜单项,或插入工具栏以创建带有弹出菜单的按钮。

popup(pos[, at=None])
Parameters:

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

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

另请参阅

mapToGlobal() exec()

separatorsCollapsible()
Return type:

布尔

属性 separatorsCollapsibleᅟ 的获取器。

setActiveAction(act)
Parameters:

actQAction

将当前高亮的操作设置为 act

另请参阅

activeAction()

setDefaultAction(act)
Parameters:

actQAction

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

另请参阅

defaultAction()

setIcon(icon)
Parameters:

图标QIcon

另请参阅

icon()

属性 iconᅟ 的设置器。

setSeparatorsCollapsible(collapse)
Parameters:

collapse – 布尔值

属性 separatorsCollapsibleᅟ 的设置器。

setTearOffEnabled(arg__1)
Parameters:

arg__1 – 布尔值

另请参阅

isTearOffEnabled()

属性 tearOffEnabledᅟ 的设置器。

setTitle(title)
Parameters:

标题 – str

另请参阅

title()

属性 titleᅟ 的设置器。

setToolTipsVisible(visible)
Parameters:

visible – 布尔值

另请参阅

toolTipsVisible()

属性 toolTipsVisibleᅟ 的设置器。

showTearOffMenu()

这是一个重载函数。

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

showTearOffMenu(pos)
Parameters:

posQPoint

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

title()
Return type:

字符串

另请参阅

setTitle()

属性 titleᅟ 的获取器。

toolTipsVisible()
Return type:

布尔

另请参阅

setToolTipsVisible()

属性 toolTipsVisibleᅟ 的获取器。

triggered(action)
Parameters:

动作QAction

当此菜单中的操作被触发时,会发出此信号。

action 是导致信号被触发的动作。

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

注意

此信号是为层次结构中的主父菜单发出的。因此,只有父菜单需要连接到插槽;子菜单不需要连接。

另请参阅

hovered() triggered()