2009-10-06 106 views
3

我加入一個ContextMenu到QTableWidget的動態:PyQt的上下文菜單

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()是一個播放列表的名稱那是從數據庫中取出,因爲你可以看到只有一個函數(addToPlaylistAction)接收所有觸發來自不同的行動。在我的addToPlaylistAction函數中,如何確定哪個菜單被點擊?

回答

3

您可以使用QAction.setData設置一些數據,以便插槽知道要添加到哪個播放列表。然後從插槽中調用self.sender()來獲取觸發信號的動作,並使用action.data()來獲取數據。

+0

如果你使用sender(),只需要小心你的函數總是作爲一個槽被調用,這樣sender()就會返回一些有效的東西。 – 2009-10-12 22:51:29

5

正確的方法是使用signal mapper:您可以將數據分配給每個發件人並獲取該數據的信號。

+0

我在http://pysnippet.blogspot.com/2010/06/qsignalmapper-at-your-service.html找到了一個很好的例子 – 2015-06-18 00:08:25