实战PyQt5: 041-菜单控件QMenu

QMenu简介

在一个GUI应用中,菜单项都是一个随处都会用到的一个控件项。在一个应用中菜单常以以下三种方式出现:

  • 主窗口顶端应用主菜单,在PyQt中的QMainWindow中包含一个菜单条,该菜单条就是用于设置系统的主菜单。
  • 点击一个按钮,弹出一个菜单,在PyQt中QToolButton常用这种方式弹出一个菜单。
  • 在一个控件上击鼠标右键,弹出一个菜单。

QMenu常用方法有:

  • addMenu(): 在菜单中添加一个新的菜单对象,该菜单对象可以继续添加子菜单;
  • addAction(): 在菜单栏添加一个无子菜单的菜单项;
  • addSeparator(): 添加一个分隔线;
  • insertMenu(): 在指定菜单项前插入一个菜单对象;
  • insertSeparator(): 插入一个分隔线;
  • clear(): 删除菜单中的所有项。

QMenu类继承关系:

实战PyQt5: 041-菜单控件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())

运行结果如下图:

实战PyQt5: 041-菜单控件QMenu

 

本文知识点

  • 菜单条QMenuBar和菜单QMenu的异同;
  • 菜单条QMenuBar和菜单QMenu的不同应用场合。

前一篇: 实战PyQt5: 040-菜单栏QMenuBar

  • 1
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值