下面的代码用.model()
创建一个QListView
。
在itemClicked
上,我试图访问index.data()
,以获得它先前用self.setData(index, QtCore.QVariant(inst))
存储的值。但它不是返回存储的值(例如['Bison','Panther','Elephant']
,['Duck','Hawk','Pigeon']
),而是返回键的名称(例如'Animals'
,'Birds'
或{
from PyQt4 import QtCore, QtGui
app=QtGui.QApplication(sys.argv)
class Model(QtCore.QAbstractListModel):
def __init__(self, *args):
QtCore.QAbstractListModel.__init__(self, *args)
self.items=[]
def rowCount(self, parent=QtCore.QModelIndex()):
return len(self.items)
def data(self, index, role=QtCore.Qt.DisplayRole):
if index.isValid():
if role == QtCore.Qt.ItemDataRole:
return self.data(index)
elif role==QtCore.Qt.DisplayRole:
return QtCore.QVariant(self.items[index.row()])
def addItems(self, instDict):
for key in instDict:
inst=instDict.get(key)
index=QtCore.QModelIndex()
self.beginInsertRows(index, 0, 0)
self.setData(index, QtCore.QVariant(inst))
self.items.extend(instDict)
self.endInsertRows()
class ListView(QtGui.QListView):
def __init__(self):
super(ListView, self).__init__()
self.model= Model()
self.model.addItems({'Animals':['Bison','Panther','Elephant'],'Birds':['Duck','Hawk','Pigeon'],'Fish':['Shark','Salmon','Piranha']})
self.setModel(self.model)
self.clicked.connect(self.itemClicked)
self.show()
def itemClicked(self, index):
print 'self.data(index).toString(): %s'%index.data().toString()
print 'self.model.data(index).toString(): %s'%self.model.data(index).toString()
window=ListView()
sys.exit(app.exec_())
下面是一个使用嵌套字典作为数据参数的完整示例。在
^{pr2}$
我不确定这是不是正确的方法,但这是有效的:)
相关问题 更多 >
编程相关推荐