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 对象的引用将传递到连接的槽函数。

示例

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

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")

文件菜单发出的 triggered() 信号连接到 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()

输出

以上代码产生以下输出:

QMenuBar, QMenu and QAction Widgets Output
pyqt_basic_widgets.htm
广告
© . All rights reserved.