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 对象就会发出trigger() 信号。 对单击的 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)
A submenu is added to top level menu.
edit = file.addMenu("Edit") edit.addAction("copy") edit.addAction("paste")
文件菜单发出的trigger() 信号连接到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()
上面的代码产生以下输出 −