PyQt 右鍵選單的實現(Qt.CustomContextMenu方式)
阿新 • • 發佈:2022-04-01
從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_())