comment ajouter un menu clic droit à chaque cellule de QTableView dans PyQt

Je veux ajouter un menu du clic droit pour supprimer, renommer ou ouvrir une image dans chacune des cellules de QTAbleView dans le rigt cliquez sur menu, j'ai essayé et trouvé tout le monde est d'essayer d'ajouter le menu d'en-tête dans tableview, j'ai essayé ci-dessous, mais qui ne semble pas travailler dans le code ci-dessous..

class GalleryUi(QtGui.QTableView):
""" Class contains the methods that forms the
UI of Image galery
"""
def __init__(self, imagesPathLst=None, parent=None):
super(GalleryUi, self).__init__(parent)
self.__sw = QtGui.QDesktopWidget().screenGeometry(self).width()
self.__sh = QtGui.QDesktopWidget().screenGeometry(self).height()
self.__animRate = 1200
self._imagesPathLst = imagesPathLst
self._thumb_width = 200
self._thumb_height = self._thumb_width + 20
self.setUpWindow(initiate=True)
self._startControlBar()
self._connections()
def contextMenuEvent(self, event):
index = self.indexAt(event.pos())
menu = QtGui.QMenu()
renameAction = QtGui.QAction('Exit', self)
renameAction.triggered.connect(self.close)
self.menu.addAction(renameAction)
self.menu.popup(QtGui.QCursor.pos())
def closeEvent(self,event):
# in case gallery is launched by Slideshow this is not needed
if hasattr(self, 'bar'):
self.bar.close()
def _startControlBar(self):
if not self._slideShowWin:
self.bar = controlBar.ControlBar()
self.bar.show()
self.bar.exitBtn.clicked.connect(self.close)
self.bar.openBtn.clicked.connect(self.selectSetNewPath)
def _connections(self):
self.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
self.connect(self, QtCore.SIGNAL(self.customContextMenuRequested(QtCore.QPoint)), self, QtCore.SLOT(displayMenu(QtCore.QPoint)))
def displayMenu(self, pos):
self.menu = QtGui.QMenu()
self.menu.addAction(self.close)
self.menu.exec_(self.mapToGlobal(event.pos()))
def selectSetNewPath(self):
path = utils._browseDir("Select the directory that contains images")
self._imagesPathLst = utils.ingestData(path)
# sets model when new folder is choosen
self.updateModel()
def setUpWindow(self, initiate=False):
""" Method to setup window frameless and fullscreen,
setting up thumbnaul size and animation rate
"""
if not self._imagesPathLst:
self.selectSetNewPath()
# sets model once at startup when window is being drawn!
if initiate:
self.updateModel()
self.setGeometry(0, 0, self.__sw, self.__sh)
self.setColumnWidth(self._thumb_width, self._thumb_height)
self.setShowGrid(False)
self.setWordWrap(True)
self.show()
self.resizeColumnsToContents()
self.resizeRowsToContents()
self.selectionModel().selectionChanged.connect(self.selChanged)
def updateModel(self):
col = self.__sw/self._thumb_width 
self._twoDLst = utils.convertToTwoDList(self._imagesPathLst, col)
lm = MyListModel(self._twoDLst, col,
(self._thumb_width, self._thumb_height), self)
self.setModel(lm)
def keyPressEvent(self, keyevent):
""" Capture key to exit, next image, previous image,
on Escape , Key Right and key left respectively.
"""
event = keyevent.key()
if event == QtCore.Qt.Key_Escape:
self._exitGallery()
def main(imgLst=None):
""" method to start gallery standalone
"""
app = QtGui.QApplication(sys.argv)
window =  GalleryUi(imgLst)
window.raise_()
sys.exit(app.exec_())
if __name__ == '__main__':
current_path = os.getcwd()
if len(sys.argv) > 1:
current_path = sys.argv[1:]
main(utils.ingestData(current_path))

source d'informationauteur Ciasto piekarz