title: how to add a right click menu to each cell of QTableView in PyQt
body: <p>I want to add a right click menu to delete, rename or open image in each of cell of QTAbleView in the rigt click menu, I have tried and found everyone is trying to add menu to a header in tableview, i tried below but that seems not working in the code below..</p>
  
  <pre><code>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) &gt; 1:
          current_path = sys.argv[1:]
      main(utils.ingestData(current_path))
  </code></pre>