PyQt 右键菜单的实现(Qt.CustomContextMenu方式)

来源:互联网 发布:淘宝手机旗舰店靠谱吗 编辑:程序博客网 时间:2024/05/16 05:45

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

#coding=utf-8import sysfrom PyQt4 import QtGuifrom PyQt4.QtCore import Qtclass 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)# 创建QMenuself.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_())


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