QMenu简介
在一个GUI应用中,菜单项都是一个随处都会用到的一个控件项。在一个应用中菜单常以以下三种方式出现:
- 主窗口顶端应用主菜单,在PyQt中的QMainWindow中包含一个菜单条,该菜单条就是用于设置系统的主菜单。
- 点击一个按钮,弹出一个菜单,在PyQt中QToolButton常用这种方式弹出一个菜单。
- 在一个控件上击鼠标右键,弹出一个菜单。
QMenu常用方法有:
- addMenu(): 在菜单中添加一个新的菜单对象,该菜单对象可以继续添加子菜单;
- addAction(): 在菜单栏添加一个无子菜单的菜单项;
- addSeparator(): 添加一个分隔线;
- insertMenu(): 在指定菜单项前插入一个菜单对象;
- insertSeparator(): 插入一个分隔线;
- clear(): 删除菜单中的所有项。
QMenu类继承关系:
测试QMenu
在前一篇文章中,演示了使用QMenuBar为主窗口提供菜单栏的方法,在本篇中,我们进一步完善主窗口菜单。
制定一个小目标,通过后续几篇文章,我们实现一个功能类似记事本(notepad)的文本编辑器,创建文件notepad.py,完整代码如下:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import (QApplication, QMainWindow, QMenuBar,
QMenu, QAction, QPlainTextEdit)
class DemoMenu(QMainWindow):
def __init__(self, parent=None):
super(DemoMenu, self).__init__(parent)
# 设置窗口标题
self.setWindowTitle('实战PyQt5: QMenu Demo-记事本')
# 设置窗口大小
self.resize(480, 360)
self.initUi()
def initUi(self):
menuBar = self.menuBar()
fileMenu = menuBar.addMenu('文件')
editMenu = menuBar.addMenu('编辑')
formatMenu = menuBar.addMenu('格式')
helpMenu = menuBar.addMenu('帮助')
#文件操作部分
fileMenu.addAction(QAction('新建', self))
fileMenu.addAction(QAction('打开', self))
fileMenu.addAction(QAction("保存", self))
fileMenu.addAction(QAction('另存为', self))
fileMenu.addSeparator()
fileMenu.addAction(QAction('退出', self))
#编辑部分
editMenu.addAction(QAction('撤销',self))
editMenu.addAction(QAction('恢复', self))
editMenu.addSeparator()
editMenu.addAction(QAction('剪切', self))
editMenu.addAction(QAction('复制', self))
editMenu.addAction(QAction('粘贴', self))
editMenu.addAction(QAction('删除', self))
editMenu.addSeparator()
editMenu.addAction(QAction('全选', self))
#格式设置部分
formatMenu.addAction(QAction('自动换行', self))
#帮助部分
helpMenu.addAction(QAction('关于...', self))
#设置一个文本编辑器作为中心小部件
txtEdit = QPlainTextEdit(self)
self.setCentralWidget(txtEdit)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = DemoMenu()
window.show()
sys.exit(app.exec())
运行结果如下图:
本文知识点
- 菜单条QMenuBar和菜单QMenu的异同;
- 菜单条QMenuBar和菜单QMenu的不同应用场合。