python函数做菜单_PyQt 右键菜单的实现(Qt.CustomContextMenu方式)

从Qt文档Qt::ContextMenuPolicy的值可以看出,实现右键菜单的方式有三种,这对于所有继承于QWidget的类都是通用的,在用每一种方式实现之前都要调用QWidget::setContextMenuPolicy(Qt::ContextMenuPolicy)方法,将要需要设置右键菜单的组件的ContextMenuPolicy值设为相应的值,下面我分享一下用Qt::CustomContextMenu方式实现右键菜单的例子,用的是python语言,因为python比较简单。

#coding=utf-8

import sys

from PyQt4 import QtGui

from PyQt4.QtCore import Qt

class MainWindow(QtGui.QMainWindow):

def __init__(self):

super(MainWindow, self).__init__()

self.createContextMenu()

def createContextMenu(self):

'''

创建右键菜单

'''

# 必须将ContextMenuPolicy设置为Qt.CustomContextMenu

# 否则无法使用customContextMenuRequested信号

self.setContextMenuPolicy(Qt.CustomContextMenu)

self.customContextMenuRequested.connect(self.showContextMenu)

# 创建QMenu

self.contextMenu = QtGui.QMenu(self)

self.actionA = self.contextMenu.addAction(u'动作A')

self.actionB = self.contextMenu.addAction(u'动作B')

self.actionC = self.contextMenu.addAction(u'动作C')

# 将动作与处理函数相关联

# 这里为了简单,将所有action与同一个处理函数相关联,

# 当然也可以将他们分别与不同函数关联,实现不同的功能

self.actionA.triggered.connect(self.actionHandler)

self.actionB.triggered.connect(self.actionHandler)

self.actionB.triggered.connect(self.actionHandler)

def showContextMenu(self, pos):

'''

右键点击时调用的函数

'''

# 菜单显示前,将它移动到鼠标点击的位置

self.contextMenu.move(self.pos() + pos)

self.contextMenu.show()

def actionHandler(self):

'''

菜单中的具体action调用的函数

'''

print 'action handler'

if __name__=='__main__':

app = QtGui.QApplication(sys.argv)

window = MainWindow()

window.show()

sys.exit(app.exec_()) 如果大家认为实现的方式有不妥,欢迎拍砖,如果大家还有什么好的实现方式,还请分享一下!