我想在 rigt 单击菜单中的 QTAbleView 的每个单元格中添加一个右键单击菜单来删除、重命名或打开图像,我已经尝试过,发现每个人都在尝试将菜单添加到 tableview 的标题中,我在下面尝试过,但这似乎在下面的代码中不起作用..
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))