0
實現從QAbstractListModel一個StringListModel這段代碼的目的是顯示字符串列表與QtCore.QAbstractListModel
錯誤而在PyQt的
import sys
from PyQt4 import QtGui, QtCore
class StringListModel(QtCore.QAbstractListModel):
def __init__(self, strings):
QtCore.QAbstractListModel.__init__(self)
self._string_list = strings
def rowCount(self):
return len(self._string_list)
def data(self, index, role):
if not index.isValid() : return QtCore.QVariant()
if role != QtCore.Qt.DisplayRole : return QtCore.QVariant()
if index.row() <= self.rowCount() : return QtCore.QVariant()
return QtCore.QVariant(self._string_list[index.row()])
def headerData(self, section, orientation, role = QtCore.Qt.DisplayRole):
if role != QtCore.Qt.DisplayRole : return QtCore.QVariant()
if orientation == QtCore.Qt.Horizontal : return QtCore.QVariant("Column %s"%section)
else:
return QtCore.QVariant("Row %s"%section)
if __name__ == '__main__':
a = QtGui.QApplication(sys.argv)
lines = ["item 1", "item 2", "item 3"]
model = StringListModel(lines)
view = QtGui.QListView()
view.setModel(model)
view.setWindowTitle("String list model")
view.show()
a.exec_()
我有錯誤herited模型是
TypeError: rowCount() takes exactly 1 positional argument (2 given)
謝謝,但現在我有另一個錯誤:TypeError:PyQt4.QtCore.QVariant表示映射類型,不能實例化。這是QVariant未佔用的類型嗎? – nam 2012-07-30 13:53:29
看到這個答案http://stackoverflow.com/questions/10382025/qvariant-in-qcombobox-python-2-vs-python-3。值得一提的是有兩種使用PyQt4的方式 - 一種是直接使用QVariant,另一種是使用普通的python對象。您似乎設置爲使用不直接使用QVariant的較新版本。嘗試使用直接的python對象而不是QVariants。 (如果它不起作用,你可能想作爲一個新問題發佈) – ChrisB 2012-07-30 14:03:00
謝謝,我要試一試! – nam 2012-07-30 14:15:52