Demo共两个文件:
演示为pushbutton添加右键菜单。
mybutton.py 文件
# -*- coding: utf-8 -*-
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class MenuButton(QPushButton):
def __init__(self,parent = None):
super(MenuButton,self).__init__(parent)
self.createContextMenu()
def createContextMenu(self):
# 创建右键菜单
# 必须将ContextMenuPolicy设置为Qt.CustomContextMenu
# 否则无法使用customContextMenuRequested信号
self.setContextMenuPolicy(Qt.CustomContextMenu)
self.customContextMenuRequested.connect(self.showContextMenu)
# 创建QMenu
self.contextMenu = QMenu(self)
self.actionA = self.contextMenu.addAction('动作A')
self.actionB = self.contextMenu.addAction('动作B')
self.actionC = self.contextMenu.addAction('动作C')
#添加二级菜单
self.second = self.contextMenu.addMenu("二级菜单")
self.actionD = self.second.addAction('动作A')
self.actionE = self.second.addAction('动作B')
self.actionF = self.second.addAction('动作C')
# 将动作与处理函数相关联
self.actionA.triggered.connect(self.actionHandler)
self.actionB.triggered.connect(self.actionHandler)
self.actionC.triggered.connect(self.actionHandler)
self.actionD.triggered.connect(self.actionHandler)
self.actionE.triggered.connect(self.actionHandler)
self.actionF.triggered.connect(self.actionHandler)
def showContextMenu(self, pos):
# 右键点击时调用的函数
# 菜单显示前,将它移动到鼠标点击的位置
self.contextMenu.exec_(QCursor.pos()) #在鼠标位置显示
def actionHandler(self):
# 菜单中的具体action调用的函数
print("actionHandler")
def mousePressEvent(self, event):
# 鼠标按下
print("mousePressEvent")
QPushButton.mousePressEvent(self,event)
def mouseReleaseEvent(self, event):
# 鼠标松开
print("mouseReleaseEvent")
QPushButton.mouseReleaseEvent(self,event)
buttontest.py 文件
# -*- coding: utf-8 -*-
import sys
from mybutton import MenuButton
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
app=QApplication(sys.argv)
# 500*500大小的窗口
myWind = QWidget()
myWind.resize(500,500)
# 新建一个button
but1 = MenuButton()
but1.setGeometry(200,200,100,50)
but1.setText("点我有菜单")
but1.setParent(myWind)
# 显示窗口
myWind.show()
app.exec_()
效果展示: