上面的软件,最左侧是QList,中间是QLabelView,准备给中间的表格加个右键菜单,主要代码如下
self.view.setContextMenuPolicy(Qt.CustomContextMenu) # 右键菜单,如果不设为CustomContextMenu,无法使用customContextMenuRequested
self.view.customContextMenuRequested.connect(self.showContextMenu)
- 1
- 2
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()
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">actionHandler</span><span class="hljs-params">(self)</span>:</span>
<span class="hljs-keyword">print</span> <span class="hljs-string">"成功"</span><div class="hljs-button {2}" data-title="复制"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li></ul></pre>
建立菜单很快,主要是位置问题,可以看到代码中关于位置的就有三条,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 "成功"