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_())

  

posted @ 2022-04-01 20:06  def_Class  阅读(826)  评论(0编辑  收藏  举报