2009-10-06 10 views
3

J'ajoute un contextmenu à un QTableWidget dynamique:PyQt menu contextuel

playlistContenxt = QAction("Add to %s" % (currentItem.text()), self.musicTable) 
playlistContenxt.setData(currentData) 
self.connect(playlistContenxt, SIGNAL("triggered()"), self.addToPlaylistAction) 
self.musicTable.addAction(playlistContenxt) 

currentItem.text() est un nom de la liste des thats étant tiré par les cheveux de db, comme vous pouvez le voir qu'une seule fonction (addToPlaylistAction) reçoit tous les déclencheurs de différentes actions. Sur ma fonction addToPlaylistAction, comment déterminer quel menu a été cliqué?

Répondre

3

Vous pouvez utiliser QAction.setData pour définir des données afin que l'emplacement sache quelle liste de lecture ajouter. Puis à partir de la fente, vous pouvez appeler self.sender() pour obtenir l'action qui a déclenché le signal, et utiliser action.data() pour récupérer les données.

+0

Si vous utilisez sender(), veillez à ce que votre fonction soit toujours appelée en tant que slot afin que expéditeur() renvoie quelque chose de valide. –

5

La méthode correcte consiste à utiliser signal mapper: Vous pouvez affecter des données à chacun des expéditeurs et obtenir un signal avec ces données.

+0

J'ai trouvé un bon exemple sur http://pysnippet.blogspot.com/2010/06/qsignalmapper-at-your-service.html –