PyQt5随笔:给PyQt5 界面添加右键菜单

您所在的位置:网站首页 右键下拉菜单如何调整位置 PyQt5随笔:给PyQt5 界面添加右键菜单

PyQt5随笔:给PyQt5 界面添加右键菜单

#PyQt5随笔:给PyQt5 界面添加右键菜单| 来源: 网络整理| 查看: 265

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触发时连接到槽函数 button self.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, QtWidgets class 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.translate Form.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,os from 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,QDialog class 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触发时连接到槽函数 button self.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美化。

 

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

 

 

 

 

 

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3