上面的软件,最左侧是QList,中间是QLabelView,准备给中间的表格加个右键菜单,主要代码如下
self.view.setContextMenuPolicy(Qt.CustomContextMenu) # 右键菜单,如果不设为CustomContextMenu,无法使用customContextMenuRequested
self.view.customContextMenuRequested.connect(self.showContextMenu)
def showContextMenu(self): # 创建右键菜单
self.view.contextMenu = QMenu(self)
self.actionA = self.view.contextMenu.addAction(u'动作a')
# self.actionA = self.view.contextMenu.exec_(self.mapToGlobal(pos)) # 1
self.view.contextMenu.popup(QCursor.pos()) # 2菜单显示的位置
self.actionA.triggered.connect(self.actionHandler)
# self.view.contextMenu.move(self.pos()) # 3
self.view.contextMenu.show()
def actionHandler(self):
print "成功"
建立菜单很快,主要是位置问题,可以看到代码中关于位置的就有三条,1和3效果一样,他获取到的位置是在表格中的位置,菜单却出现在整个软件的相对位置上,只有2获得的位置是准确的
def showContextMenu(self, pos): # 创建右键菜单
self.view.contextMenu = QMenu(self)
self.actionA = self.view.contextMenu.addAction(u'动作a')
# self.actionA = self.view.contextMenu.exec_(self.mapToGlobal(pos)) # 1
self.view.contextMenu.popup(QCursor.pos()) # 2菜单显示的位置
self.actionA.triggered.connect(self.actionHandler)
# self.view.contextMenu.move(self.pos() + pos) # 3
self.view.contextMenu.show()
def actionHandler(self):
print "成功"