PyQt右键创建菜单栏

21 篇文章 1 订阅

本文主要提供了两种右键创建菜单的方法,作为参考~
在这里插入图片描述

# -*- coding: utf-8 -*-
from PyQt5 import QtGui, QtCore
import sys

from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QMainWindow, QApplication, QMenu, QAction


class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        # self.createContextMenu()

    def contextMenuEvent(self, event):
        menu =QMenu(self)
        newAction = QAction(QIcon('create.svg'), "创建", self)
        openAction = QAction(QIcon('open.svg'), "打开", self)
        deleteAction = QAction(QIcon('delete.svg'), "删除", self)
        newAction.triggered.connect(self.newFun)
        openAction.triggered.connect(self.openFun)
        deleteAction.triggered.connect(self.deleteFun)
        menu.addAction(newAction)
        menu.addAction(openAction)
        menu.addAction(deleteAction)
        menu.exec_(QtGui.QCursor().pos())

    def newFun(self):
        self.setWindowTitle("创建")

    def openFun(self):
        self.setWindowTitle("打开")

    def deleteFun(self):
        self.setWindowTitle("删除")

    # def createContextMenu(self):
    #     '''''
    #     创建右键菜单
    #     '''
    #     # 必须将ContextMenuPolicy设置为Qt.CustomContextMenu
    #     # 否则无法使用customContextMenuRequested信号
    #     self.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
    #     self.customContextMenuRequested.connect(self.showContextMenu)
    #
    #     # 创建QMenu
    #     self.contextMenu = QMenu(self)
    #     self.actionA = self.contextMenu.addAction(u'添加')
    #     self.actionB = self.contextMenu.addAction(u'删除')
    #     # 将动作与处理函数相关联
    #     # 这里为了简单,将所有action与同一个处理函数相关联,
    #     # 当然也可以将他们分别与不同函数关联,实现不同的功能
    #     self.actionA.triggered.connect(self.actionHandler)
    #     self.actionB.triggered.connect(self.actionHandler)
    #
    # def showContextMenu(self, pos):
    #     '''''
    #     右键点击时调用的函数
    #     '''
    #     # 菜单显示前,将它移动到鼠标点击的位置
    #     self.contextMenu.move(QtGui.QCursor().pos())
    #     self.contextMenu.show()
    #
    # def actionHandler(self):
    #     print('我被点击了')


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

第一种方式:如文中未注释的代码,contextMenuEvent 这个方法会拦截到右键点击事件,然后在此时创建一个menu并加入对应的操作按钮即可
第二种方式:文中注释的代码,设置自定义上下文,同样是用于拦截点击事件,其他的同注释

多层级QMenu

将上述的contextMenuEvent 改为如下:

    def contextMenuEvent(self, event):
        menu = QMenu(self)
        newAction = QAction(QIcon('create.svg'), "创建", self)
        openAction = QAction(QIcon('open.svg'), "打开", self)
        deleteAction = QAction(QIcon('delete.svg'), "删除", self)
        newAction.triggered.connect(self.newFun)
        openAction.triggered.connect(self.openFun)
        deleteAction.triggered.connect(self.deleteFun)
        menu.addAction(newAction)
        menu.addAction(openAction)
        menu.addAction(deleteAction)
        menu1 = menu.addMenu(QIcon('delete.svg'), "下拉框")
        newAction1 = QAction(QIcon('create.svg'), "下拉创建", self)
        openAction1 = QAction(QIcon('open.svg'), "下拉打开", self)
        deleteAction1 = QAction(QIcon('delete.svg'), "下拉删除", self)
        menu1.addAction(newAction1)
        menu1.addAction(openAction1)
        menu1.addAction(deleteAction1)
        menu.exec_(QtGui.QCursor().pos())

可以得到效果如下
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值