- PyQt5 教程
- PyQt5 - 首页
- PyQt5 - 简介
- PyQt5 - 新特性
- PyQt5 - Hello World
- PyQt5 - 主要类
- PyQt5 - 使用 Qt Designer
- PyQt5 - 信号与槽
- PyQt5 - 布局管理
- PyQt5 - 基本组件
- PyQt5 - QDialog 类
- PyQt5 - QMessageBox
- PyQt5 - 多文档界面
- PyQt5 - 拖放
- PyQt5 - 数据库处理
- PyQt5 - 绘图 API
- PyQt5 - BrushStyle 常量
- PyQt5 - QClipboard
- PyQt5 - QPixmap 类
- PyQt5 有用资源
- PyQt5 - 快速指南
- PyQt5 - 有用资源
- PyQt5 - 讨论
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()
输出
以上代码产生以下输出: