<p>你可以简单地使用setData来设置数据,下面是一个有效的例子,我改变了你的代码位</p>
<pre><code>#!/usr/bin/python
# -*- coding: utf-8 -*-
# Imports
#
import sys
from PySide import QtGui, QtCore
from functools import partial
class Person():
def __init__(self, name="", age=None):
self.name = name
self.age = age
def getName(self):
return self.name
# Main Widget
#
class ExampleWidget(QtGui.QWidget):
def __init__(self,):
super(ExampleWidget, self).__init__()
self.initUI()
def initUI(self):
# formatting
self.setWindowTitle("Example")
# context menu
self.main_menu = QtGui.QMenu()
self.sub_menu = QtGui.QMenu("Great")
self.main_menu.addMenu(self.sub_menu)
names = ["Joe","Kevin","Amy","Doug","Jenny"]
# sub-menu
for index, name in enumerate(names):
fancyName = "%s - %s" % (index, name)
action = self.sub_menu.addAction( fancyName )
action.setData(Person(name=name))
action.triggered.connect(partial(self.menu_action, action))
# widgets
self.factionsList = QtGui.QListWidget()
# signal
self.factionsList.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
self.factionsList.customContextMenuRequested.connect(self.on_context_menu_factions)
# layout
self.mainLayout = QtGui.QGridLayout(self)
self.mainLayout.addWidget(self.factionsList, 1, 0)
self.show()
def menu_action(self, item):
itmData = item.data()
print itmData.getName()
def on_context_menu_factions(self, pos):
self.main_menu.exec_( QtGui.QCursor.pos() )
# Main
#
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
ex = ExampleWidget()
res = app.exec_()
sys.exit(res)
</code></pre>