PySide6.QtWidgets.QMenuBar

class QMenuBar

QMenuBar 类提供了一个水平菜单栏。更多

PySide6.QtWidgets.QMenuBar 的继承图

概要

属性

方法

虚拟方法

信号

注意

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

详细描述

警告

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

菜单栏由一系列下拉菜单项组成。您可以使用addMenu()添加菜单项。例如,假设menubar是指向QMenuBar的指针,fileMenu是指向QMenu的指针,以下语句将菜单插入菜单栏:

menubar.addMenu(fileMenu)

菜单项文本中的“&”符号将Alt+F设置为该菜单的快捷键。(您可以使用“&&”在菜单栏中显示实际的“&”符号。)

不需要布局菜单栏。它会自动将其几何形状设置为父小部件的顶部,并在父小部件调整大小时适当地更改它。

用法

在大多数主窗口风格的应用程序中,您会使用QMainWindow中提供的menuBar()函数,将QMenu添加到菜单栏,并将QAction添加到弹出菜单中。

示例(来自菜单示例):

fileMenu = menuBar().addMenu(tr("File"))
fileMenu.addAction(newAct)

菜单项可以通过removeAction()移除。

可以通过使用QWidgetAction类的实例来将小部件添加到菜单中。这些操作可以像往常一样插入到菜单中;有关更多详细信息,请参阅QMenu文档。

平台依赖的外观和感觉

不同的平台对菜单栏的外观及其在用户交互时的行为有不同的要求。例如,Windows系统通常配置为,只有在按下Alt键时才会显示指示菜单栏项键盘快捷键的下划线字符助记符。

QMenuBar 作为全局菜单栏

在macOS和某些Linux桌面环境(如Ubuntu Unity)上,QMenuBar是一个用于使用系统范围菜单栏的包装器。如果你在一个对话框中有多个菜单栏,最外层的菜单栏(通常位于具有Qt::Window小部件标志的小部件内)将用于系统范围的菜单栏。

Qt for macOS 还提供了一个菜单栏合并功能,使 QMenuBar 更符合 macOS 菜单栏布局的惯例。如果某个条目被移动,其插槽仍会像在原始位置一样触发。

合并功能基于菜单项的QAction::menuRole()。如果一个项目具有QAction::TextHeuristicRole,则通过使用以下启发式方法匹配标题的字符串来确定角色:

字符串匹配

位置

备注

about.*

应用程序菜单 | 关于 <应用程序名称>

应用程序名称从 Info.plist 文件中获取(见下面的注释)。如果未找到此条目,应用程序菜单中将不会显示“关于”项。

配置、选项、设置、设置或偏好

应用程序菜单 | 偏好设置

如果未找到此条目,设置项将被禁用

退出或退出

应用程序菜单 | 退出 <应用程序名称>

如果未找到此条目,将创建一个默认的退出项来调用 QCoreApplication::quit()

您可以通过将QAction::menuRole()属性设置为QAction::NoRole来覆盖此行为。

如果你想让Mac应用程序中的所有窗口共享一个菜单栏,你必须创建一个没有父级的菜单栏。可以通过以下方式创建一个没有父级的菜单栏:

menuBar = QMenuBar(None)

注意

不要调用menuBar()来创建共享菜单栏,因为该菜单栏将以QMainWindow作为其父对象。该菜单栏只会显示在父QMainWindow中。

注意

macOS菜单栏中应用程序名称的文本是从应用程序包中的Info.plist文件中设置的值获取的。有关更多信息,请参阅Qt for macOS - 部署。

注意

在Linux上,如果D-Bus会话总线上有com.canonical.AppMenu.Registrar服务可用,那么Qt将与其通信,将应用程序的菜单安装到全局菜单栏中,如前所述。

示例

菜单示例展示了如何使用QMenuBarQMenu。其他主窗口应用程序示例也使用这些类提供了菜单。

另请参阅

QMenu 苹果人机界面指南介绍 菜单示例

注意

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

property defaultUpᅟ: bool

此属性保存弹出窗口的方向。

默认的弹出方向。默认情况下,菜单会在屏幕上“向下”弹出。通过将属性设置为true,菜单将“向上”弹出。您可能会为位于其引用文档下方的菜单调用此功能。

如果菜单无法在屏幕上完全显示,将自动使用另一个方向。

Access functions:
property nativeMenuBarᅟ: bool

此属性决定是否在支持的平台上使用菜单栏作为原生菜单栏。

此属性指定是否应在支持它的平台上将菜单栏用作本机菜单栏。当前支持的平台是macOS和使用com.canonical.dbusmenu D-Bus接口的Linux桌面(如Ubuntu Unity)。如果此属性为true,则菜单栏将用于本机菜单栏,并且不在其父窗口内;如果false,则菜单栏保留在窗口内。在其他平台上,设置此属性无效,读取此属性将始终返回false

默认情况下,遵循是否为应用程序设置了Qt::AA_DontUseNativeMenuBar属性。显式设置此属性会覆盖该属性的存在(或不存在)。

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

父级QWidget

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

actionAt(pt)
Parameters:

ptQPoint

Return type:

QAction

返回位于pt的QAction。如果在pt没有动作或该位置有分隔符,则返回None

actionGeometry(act)
Parameters:

actQAction

Return type:

QRect

返回动作 act 的几何形状为 QRect。

另请参阅

actionAt()

activeAction()
Return type:

QAction

返回当前高亮的QAction,如果有的话,否则返回None

另请参阅

setActiveAction()

addMenu(menu)
Parameters:

菜单QMenu

Return type:

QAction

menu附加到菜单栏。返回菜单的menuAction()。菜单栏不会拥有该菜单的所有权。

注意

返回的 QAction 对象可用于隐藏相应的菜单。

另请参阅

addAction() menuAction()

addMenu(title)
Parameters:

标题 – str

Return type:

QMenu

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

另请参阅

addAction() menuAction()

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

  • 标题 – str

Return type:

QMenu

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

另请参阅

addAction() menuAction()

addSeparator()
Return type:

QAction

向菜单添加一个分隔符。

clear()

从菜单栏中移除所有操作。

注意

在macOS上,已合并到系统菜单栏的菜单项不会被此函数移除。处理这个问题的一种方法是自己移除额外的操作。你可以在不同的菜单上设置菜单角色,这样你就可以提前知道哪些菜单项会被合并,哪些不会。然后决定要重新创建或移除哪些内容。

另请参阅

removeAction()

cornerWidget([corner=Qt.TopRightCorner])
Parameters:

角落Corner

Return type:

QWidget

返回第一个菜单项左侧或最后一个菜单项右侧的小部件,具体取决于corner

注意

使用除Qt::TopRightCorner或Qt::TopLeftCorner之外的角落将导致警告。

另请参阅

setCornerWidget()

hovered(action)
Parameters:

动作QAction

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

通常用于更新状态信息。

另请参阅

triggered() hovered()

initStyleOption(option, action)
Parameters:

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

insertMenu(before, menu)
Parameters:
Return type:

QAction

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

另请参阅

insertAction() addMenu()

insertSeparator(before)
Parameters:

之前QAction

Return type:

QAction

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

isDefaultUp()
Return type:

布尔

属性 defaultUpᅟ 的获取器。

isNativeMenuBar()
Return type:

布尔

属性 nativeMenuBarᅟ 的获取器。

setActiveAction(action)
Parameters:

动作QAction

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

另请参阅

activeAction()

setCornerWidget(w[, corner=Qt.TopRightCorner])
Parameters:

这将设置给定的widget直接显示在第一个菜单项的左侧,或最后一个菜单项的右侧,具体取决于corner

菜单栏接管了widget的所有权,将其重新设置为菜单栏的子部件。然而,如果corner已经包含了一个部件,那么之前的部件将不再被管理,并且仍然是菜单栏的可见子部件。

注意

使用除Qt::TopRightCorner或Qt::TopLeftCorner之外的角落将导致警告。

另请参阅

cornerWidget()

setDefaultUp(arg__1)
Parameters:

arg__1 – 布尔值

另请参阅

isDefaultUp()

属性 defaultUpᅟ 的设置器。

setNativeMenuBar(nativeMenuBar)
Parameters:

nativeMenuBar – 布尔值

另请参阅

isNativeMenuBar()

属性 nativeMenuBarᅟ 的设置器。

triggered(action)
Parameters:

动作QAction

当属于此菜单栏的菜单中的操作因鼠标点击而触发时,会发出此信号;action 是导致信号发出的操作。

注意

QMenuBar 必须拥有 QMenu 的所有权,此信号才能正常工作。

通常,您会使用QAction::triggered()将每个菜单操作连接到单个槽,但有时您可能希望将多个项目连接到单个槽(最常见的情况是用户从数组中选择)。在这种情况下,此信号非常有用。

另请参阅

hovered() triggered()