在PyQt中对QTableView添加右键菜单

在PyQt中对QTableView添加右键菜单_第1张图片

上面的软件,最左侧是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 "成功"

你可能感兴趣的:(python,pyqt)