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_())
本文来自博客园,转载请注明原文链接:https://www.cnblogs.com/WG11/p/16088779.html,作者:def_Class