QMenuBar、QMenu & QAction 组件



在 QMainWindow 对象标题栏下方,有一个水平方向的QMenuBar,用于显示 QMenu 对象。

QMenu 类提供一个可以添加到菜单栏的组件。它也用于创建上下文菜单和弹出菜单。每个 QMenu 对象可以包含一个或多个QAction 对象或嵌套的 QMenu 对象。

要创建弹出菜单,PyQt API 提供了 createPopupMenu() 函数。menuBar() 函数返回主窗口的 QMenuBar 对象。addMenu() 函数允许向菜单栏添加菜单。依次使用 addAction() 方法向菜单中添加动作。

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

以下是 QMenu 最常用的方法。

序号 方法 & 描述
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 PyQt4.QtCore import *
from PyQt4.QtGui 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
广告