1.前言

一个完整的界面程序怎么少得了右键菜单呢?如在浏览器的右键菜单

我做的右键菜单如下图,其包括:图标,选项名称,快捷键

图标可以在      https://www.iconfont.cn/collections/index?spm=a313x.7781069.1998910419.3

这个阿里巴巴图标网站免费下载,下载16*16尺寸就可以

2.PyQt5版本 :5.15.0

3.创建右键菜单代码分析

3.1 声明创建右键菜单

#声明在groupBox创建右键菜单
self.groupBox.setContextMenuPolicy(Qt.CustomContextMenu)
self.groupBox.customContextMenuRequested.connect(self.create_rightmenu)  # 连接到菜单显示函数

这两句声明语句是必须要有的。

其中self.grounpBox 是要创建右键菜单的控件,只有在groupBox控件上右击鼠标才弹出菜单。如果是创建整个pyqt5 界面的右键菜单,用self 就可以。

self.create_rightmenu  是创建右键菜单的槽函数。虽然第一句声明了右键菜单,但其实它里面是没有内容的,槽函数就是创建右键菜单的具体内容。

其他关键字是PyQt5 创建右键菜单的关键字,如果没有把握,不能更改。

3.2 创建右键菜单槽函数

#创建右键菜单函数def create_rightmenu(self):#菜单对象self.groupBox_menu = QMenu(self)self.actionA = QAction(QIcon('image/保存.png'),u'保存数据',self)#创建菜单选项对象self.actionA.setShortcut('Ctrl+S')#设置动作A的快捷键self.groupBox_menu.addAction(self.actionA)#把动作A选项对象添加到菜单self.groupBox_menu上self.actionB = QAction(QIcon('image/删除.png'),u'删除数据',self)self.groupBox_menu.addAction(self.actionB)self.actionA.triggered.connect(self.button) #将动作A触发时连接到槽函数 buttonself.actionB.triggered.connect(self.button_2)self.groupBox_menu.popup(QCursor.pos())#声明当鼠标在groupBox控件上右击时,在鼠标位置显示右键菜单   ,exec_,popup两个都可以,

代码分析说明:一定要注意图标的位置格式,为了稳一点,可以使用绝对地址,如:D:/code_python/u3/image/保存.png (是 / 不是 \

当然,也可以不要图标 如修改对象为

self.actionA = QAction(u'保存数据',self)

4.完整代码(我是UI和逻辑代码分开的)

完整代码下载(包括图标)https://download.csdn.net/download/qq_38463737/12578710

UI py文件

# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'testui.ui'
#
# Created by: PyQt5 UI code generator 5.15.0
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_Form(object):def setupUi(self, Form):Form.setObjectName("Form")Form.resize(362, 310)self.groupBox = QtWidgets.QGroupBox(Form)self.groupBox.setGeometry(QtCore.QRect(50, 40, 241, 211))self.groupBox.setObjectName("groupBox")self.lineEdit = QtWidgets.QLineEdit(self.groupBox)self.lineEdit.setGeometry(QtCore.QRect(60, 70, 113, 20))self.lineEdit.setObjectName("lineEdit")self.pushButton = QtWidgets.QPushButton(self.groupBox)self.pushButton.setGeometry(QtCore.QRect(30, 140, 75, 23))self.pushButton.setObjectName("pushButton")self.pushButton_2 = QtWidgets.QPushButton(self.groupBox)self.pushButton_2.setGeometry(QtCore.QRect(140, 140, 75, 23))self.pushButton_2.setObjectName("pushButton_2")self.retranslateUi(Form)QtCore.QMetaObject.connectSlotsByName(Form)def retranslateUi(self, Form):_translate = QtCore.QCoreApplication.translateForm.setWindowTitle(_translate("Form", "Form"))self.groupBox.setTitle(_translate("Form", "GroupBox"))self.pushButton.setText(_translate("Form", "保存数据"))self.pushButton_2.setText(_translate("Form", "删除数据"))

逻辑操作代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# author:mgboy time:2020/7/5
import sys,osfrom PyQt5.QtGui import QCursor, QIcon
from PyQt5.QtWidgets import QApplication, QWidget, QMenu, QAction
from PyQt5 import QtCore
from PyQt5.QtCore import QSettings, QDateTime, Qt
from testui import Ui_Form #引用UI文件,根据调用类型选择继承窗口类型:QMainWindow,QWidget,QDialogclass MyMainWindow(QWidget, Ui_Form):#Widget界面时>>(QWidget,UI_。。),MainWindow类似def __init__(self, parent=None):super(MyMainWindow, self).__init__(parent)self.setupUi(self)#按钮信号连接对象self.pushButton.clicked.connect(self.button)self.pushButton_2.clicked.connect(self.button_2)#声明在groupBox创建右键菜单self.groupBox.setContextMenuPolicy(Qt.CustomContextMenu)self.groupBox.customContextMenuRequested.connect(self.create_rightmenu)  # 连接到菜单显示函数def button(self):#按钮1槽函数,进行数据保存print('保存数据')def button_2(self):#按钮2槽函数,删除数据print('删除数据')#创建右键菜单函数def create_rightmenu(self):#菜单对象self.groupBox_menu = QMenu(self)self.actionA = QAction(QIcon('image/保存.png'),u'保存数据',self)#self.actionA = self.contextMenu.addAction(QIcon("images/0.png"),u'|  动作A')self.actionA.setShortcut('Ctrl+S')#设置快捷键self.groupBox_menu.addAction(self.actionA)#把动作A选项添加到菜单self.actionB = QAction(QIcon('image/删除.png'),u'删除数据',self)self.groupBox_menu.addAction(self.actionB)self.actionA.triggered.connect(self.button) #将动作A触发时连接到槽函数 buttonself.actionB.triggered.connect(self.button_2)self.groupBox_menu.popup(QCursor.pos())#声明当鼠标在groupBox控件上右击时,在鼠标位置显示右键菜单   ,exec_,popup两个都可以,if __name__ == "__main__":#适配2k高分辨率屏幕QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)app = QApplication(sys.argv)myWin = MyMainWindow()myWin.show()sys.exit(app.exec_())

这样创建的菜单并不是很美观,留意我的下一篇文章对它进行QSS美化。

如果有帮助,希望给个赞!!!

PyQt5随笔:给PyQt5 界面添加右键菜单相关推荐

  1. java 右键菜单_界面操作--添加右键菜单

    [java]代码库package 添加右键菜单; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; impor ...

  2. tkinter向文本框里加内容_给tkinter文本框添加右键菜单

    给tkinter文本框添加右键菜单 需求:直接右键点击使用tkinter创建的文本框是不会弹出菜单的.我们需要实现右键点击tkinter框架下的Entry对象.Text对象后弹出右键菜单可复制.粘贴和 ...

  3. PyQt5随笔:PyQt5 官方网站文档、一些基础教程网站和书籍推荐

    PyQt5随笔:PyQt5 官方网站文档.一些基础教程网站和书籍推荐 文章目录 PyQt5随笔:PyQt5 官方网站文档.一些基础教程网站和书籍推荐 1. 官方网站文档 2.基础教程网站(点击标题即可 ...

  4. PyQt5随笔:PyQt5 程序在开机自启动时读取文件出错导致崩溃解决办法

    PyQt5随笔:PyQt5 程序在开机自启动时读取文件出错导致崩溃解决办法 1.前言 最近在写一个 Python+pyqt5 小项目,在改善过程中想添加一个日志记录,我是打算用txt 文件记录就好,操 ...

  5. 在(CListView)列表视图中添加右键菜单的方法

    使用弹出式菜单(PopMenu) 弹 出式菜单(PopMenu)大家都熟悉,在WIN98的桌面上单击鼠标右键弹出的菜单就是弹出式菜单.通常情况下,弹出式菜单在鼠标右键单击时弹出,当 然,也可以根据需要 ...

  6. ListCtrl添加右键菜单(ListCtrl类里编辑,给ListCtrl 发送NM_RCLICK消息)

    在开发中会用到右键菜单,我们来一起学习一下. 假如,我们现在已经准备好了列表,就差右键处理了. 1.在资源视图中的添加一个MENU,如图 2.给要添加右键菜单的ListCtrl子类,添加消息 按 ct ...

  7. merlin.acs的使用方法 merlin.acs添加右键菜单

    阅读全文:http://www.cckan.net/forum.php?mod=viewthread&tid=39 看看这个怎么样吧 直接看代码吧我就不多说了 1.先下载一下这个控件 吧 网上 ...

  8. openlayer右键菜单_OpenLayers添加右键菜单

    1.       首先修改 OpenLayers Events.js 定位到下面代码段,添加右键菜单事件: View Code OpenLayers.Events = OpenLayers.Class ...

  9. 非管理员用户添加右键菜单(管理员也适用)

    目录 背景 解决办法 总结:把其他教程中的HKEY_CLASSES_ROOT替换为HKEY_CURRENT_USER\SOFTWARE\Classes即可 背景 网上大多数教程添加右键菜单的方法都需要 ...

最新文章

  1. 高性能服务器架构(二):缓存清理策略
  2. Keil(MDK-ARM-STM32)系列教程(八)在线调试(Ⅰ)
  3. vs.net c# 安装、注册windows service服务,判断服务是否存在,是否启动
  4. IntelliJ idea 添加参数
  5. xUtils3 图片加载模块
  6. property中的strong 、weak、copy 、assign 、retain 、unsafe_unretained 与autoreleasing区别和作用详解...
  7. 计算机右键管理提示没有关联应用,我的电脑--右键--管理,提示与应用程序无关联...
  8. 外卖侠cps V5.6版本小程序源码_支持多种CPS收益和流量主收益
  9. 文件对应的Content-Type类型
  10. 【NLP_命名实体识别】Albert+BiLSTM+CRF模型训练、评估与使用
  11. linux下查看vnc端口_Linux的VNCServer的默认端口是多少?
  12. UI设计之logo制作基本方法
  13. 孙海波:重新发现“同案”:构建案件相似性的判断标准
  14. 单片机的组成、工作原理、分类、特点以及发展趋势
  15. Gigaphoton供给最新版ArF受激准分子激光器GT65A
  16. 图解机器学习算法(13) | 聚类算法详解(机器学习通关指南·完结)
  17. 《Power》读书笔记
  18. JDBC,JdbcTemplate,JPA,Hibernate之间的关系概述
  19. go和python区别_go和python_go 和python_go和python区别 - 云+社区 - 腾讯云
  20. 机器学习和人工智能有什么关系?

热门文章

  1. 1021 -- 最后的胜利者
  2. 纽顿集团在纳斯达克上市:IPO首日下跌63%,市值大幅缩水
  3. 5.10.3 操作查询之从包含一对多关系中“一”方的表来删除一方记录和多方表中的相关记录
  4. 283 款区块链游戏仅 5 款 DAU 破百,开发者涌入,“韭菜”已经开始逃
  5. Gallery4.2 代码研究(一):Gallery2结构分析
  6. 无监督学习KMeans学习笔记和实例
  7. 2013年度学习计划,放在博客里面时时的警告自己要坚持。
  8. 牛客挑战赛34 A 能天使的愿望 (dp 分组背包)
  9. 词云--《红楼梦》--jieba库--wordcloud库
  10. 轻松解决外出旅游免费wifi上网问题