- PyQt 教程
- PyQt - 首页
- PyQt - 简介
- PyQt - 环境搭建
- PyQt - Hello World
- PyQt - 主要类
- PyQt - 使用 Qt Designer
- PyQt - 元对象
- PyQt 信号 & 槽
- PyQt - 信号和槽
- PyQt - 支持和信号
- PyQt - 未绑定和已绑定信号
- PyQt - 使用 PyQtSignal 创建新的信号
- PyQt - 连接、断开和发射信号
- PyQt - 槽装饰器
- PyQt - 槽连接
- PyQt 布局
- PyQt - 布局管理
- PyQt - QBoxLayout
- PyQt - QGridLayout
- PyQt - QFormLayout
- PyQt - QHBoxLayout
- PyQt - QVBoxLayout
- PyQt - QStackedLayout
- PyQt - QGraphicsGridLayout
- PyQt - QGraphicsAnchorLayout
- PyQt - QGraphicsLayout
- PyQt - QGraphicsLinearLayout
- PyQt 基本组件
- PyQt - 基本组件
- PyQt - QLabel 组件
- PyQt - QLineEdit 组件
- PyQt - QPushButton 组件
- PyQt - QRadioButton 组件
- PyQt - QCheckBox 组件
- PyQt - QComboBox 组件
- PyQt - QSpinBox 组件
- PyQt - QMessageBox
- PyQt - QDialogButtonBox 组件
- PyQt - QFontComboBox 组件
- PyQt - QDoubleSpinBox 组件
- PyQt - QToolBox 组件
- PyQt - QDialog 类
- PyQt - QMessageBox
- PyQt - 多文档界面
- PyQt - 拖放操作
- PyQt 绘图 API
- PyQt - 绘图 API
- PyQt 数据库
- PyQt - 数据库操作
- PyQt 核心知识
- PyQt - BrushStyle 常量
- PyQt - QClipboard
- PyQt - QPixmap 类
- PyQt 有用资源
- PyQt - 快速指南
- PyQt - 有用资源
- PyQt - 讨论
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()
以上代码产生以下输出: