1. 程式人生 > 其它 >PyQt 右鍵選單的實現(Qt.CustomContextMenu方式)

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