PyQt5 - QMenuBar、QMenu 和 QAction 小部件

QMainWindow 对象标题栏下方的水平 QMenuBar 保留用于显示 QMenu 对象。

QMenu 类提供了一个可以添加到菜单栏的小部件。 它还用于创建上下文菜单和弹出菜单。 每个 QMenu 对象可能包含一个或多个 QAction 对象或级联的 QMenu 对象。

为了创建弹出菜单,PyQt API 提供了 createPopupMenu() 函数。 menuBar() 函数返回主窗口的 QMenuBar 对象。 addMenu() 函数允许向栏添加菜单。 反过来,操作通过 addAction() 方法添加到菜单中。

下表列出了设计菜单系统时使用的一些重要方法。

序号 方法 & 说明
1

menuBar()

返回主窗口的 QMenuBar 对象

2

addMenu()

向菜单栏添加一个新的 QMenu 对象

3

addAction()

向 QMenu 小部件添加一个由文本或图标组成的操作按钮

4

setEnabled()

将操作按钮的状态设置为启用/禁用

5

addSeperator()

在菜单中添加分隔线

6

Clear()

删除菜单/菜单栏的内容

7

setShortcut()

将键盘快捷键关联到操作按钮

8

setText()

将文本分配给操作按钮

9

setTitle()

设置 QMenu 小部件的标题

10

text()

检索与 QAction 对象关联的文本

11

title()

检索与 QMenu 对象关联的文本

每当单击任何 QAction 按钮时,QMenu 对象都会发出 triggered() 信号。 对单击的 QAction 对象的引用被传递给连接的槽函数。


示例

在此示例中,首先存储对顶级窗口的 QMenuBar 对象(必须是 QMainWindow 对象)的所有引用。

bar = self.menuBar()

文件菜单通过 addMenu() 方法添加到菜单栏。

file = bar.addMenu("File")

菜单中的操作按钮可以是字符串或 QAction 对象。

file.addAction("New")
save = QAction("Save",self)
save.setShortcut("Ctrl+S")
file.addAction(save)

子菜单被添加到顶级菜单。

edit = file.addMenu("Edit")
edit.addAction("copy")
edit.addAction("paste")

文件菜单发出的trigger() 信号连接到processtrigger() 方法,该方法接收引起信号的QAction 对象。

file.triggered[QAction].connect(self.processtrigger)

完整代码如下 −

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class menudemo(QMainWindow):
   def __init__(self, parent = None):
      super(menudemo, self).__init__(parent)
		
      layout = QHBoxLayout()
      bar = self.menuBar()
      file = bar.addMenu("File")
      file.addAction("New")
		
      save = QAction("Save",self)
      save.setShortcut("Ctrl+S")
      file.addAction(save)
		
      edit = file.addMenu("Edit")
      edit.addAction("copy")
      edit.addAction("paste")
		
      quit = QAction("Quit",self) 
      file.addAction(quit)
      file.triggered[QAction].connect(self.processtrigger)
      self.setLayout(layout)
      self.setWindowTitle("menu demo")
		
   def processtrigger(self,q):
      print q.text()+" is triggered"
		
def main():
   app = QApplication(sys.argv)
   ex = menudemo()
   ex.show()
   sys.exit(app.exec_())
	
if __name__ == '__main__':
   main()

Output

上面的代码产生以下输出 −

QMenuBar, QMenu and QAction 小部件输出

❮ PyQt5 基本小部件