PyQt:QDataWidgetMapper 不显示小部件中的任何数据
PyQt: QDataWidgetMapper doesn't show any data in widgets
我有一个要映射到某些小部件的 AbstractItemModel。在 window 的构造函数中,我有:
print("creating model")
self.model = Model(self.cluster)
print("creating mapper")
self.mapper = QtGui.QDataWidgetMapper()
print("setting model")
self.mapper.setModel(self.model)
print("setting root index")
self.mapper.setRootIndex(self.model.root_index())
print("setting index")
self.mapper.setCurrentIndex(0)
print("mapping widgets")
self.mapper.addMapping(self.realNameLineEdit, 1)
self.mapper.addMapping(self.emailLineEdit, 2)
self.mapper.addMapping(self.infoPlainTextEdit, 3)
print("done")
这导致以下输出:
creating model
Model.__init__()
Model.rowCount(<PySide.QtCore.QModelIndex(0,0,0x7faa2ff446a0,Model(0x17c6f50) ) at 0x7faa2d9ea4c8>) = 0
Model.rowCount(<PySide.QtCore.QModelIndex(0,0,0x7faa2ff446a0,Model(0x17c6f50) ) at 0x7faa2d9d2888>) = 1
creating mapper
setting model
setting root index
Model.root_index()
setting index
Model.rowCount(<PySide.QtCore.QModelIndex(-1,-1,0x0,QObject(0x0) ) at 0x7faa2ff50d08>) = 2
Model.index(0, 0, <PySide.QtCore.QModelIndex(-1,-1,0x0,QObject(0x0) ) at 0x7faa2ff50d08>)
Model.rowCount(<PySide.QtCore.QModelIndex(-1,-1,0x0,QObject(0x0) ) at 0x7faa2d9ea608>) = 2
Model.columnCount(<PySide.QtCore.QModelIndex(-1,-1,0x0,QObject(0x0) ) at 0x7faa2d9ea608>) = 4
mapping widgets
Model.index(0, 1, <PySide.QtCore.QModelIndex(-1,-1,0x0,QObject(0x0) ) at 0x7faa2ff50d08>)
Model.rowCount(<PySide.QtCore.QModelIndex(-1,-1,0x0,QObject(0x0) ) at 0x7faa2d9ea608>) = 2
Model.columnCount(<PySide.QtCore.QModelIndex(-1,-1,0x0,QObject(0x0) ) at 0x7faa2d9ea608>) = 4
Model.index(0, 2, <PySide.QtCore.QModelIndex(-1,-1,0x0,QObject(0x0) ) at 0x7faa2ff50d08>)
Model.rowCount(<PySide.QtCore.QModelIndex(-1,-1,0x0,QObject(0x0) ) at 0x7faa2d9ea608>) = 2
Model.columnCount(<PySide.QtCore.QModelIndex(-1,-1,0x0,QObject(0x0) ) at 0x7faa2d9ea608>) = 4
Model.index(0, 3, <PySide.QtCore.QModelIndex(-1,-1,0x0,QObject(0x0) ) at 0x7faa2ff50d08>)
Model.rowCount(<PySide.QtCore.QModelIndex(-1,-1,0x0,QObject(0x0) ) at 0x7faa2d9ea608>) = 2
Model.columnCount(<PySide.QtCore.QModelIndex(-1,-1,0x0,QObject(0x0) ) at 0x7faa2d9ea608>) = 4
done
对我来说到目前为止看起来是正确的。但是 none 的映射小部件显示任何数据。 Model.data() 甚至根本没有被调用(我在那里也有打印)。
当我在 realNameLineEdit 中输入内容并按 return 时,我得到:
Model.setData(<PySide.QtCore.QModelIndex(0,1,0x7faa2da31908,Model(0x17c6f50) ) at 0x7faa2d9eadc8>, real name, 2)
看起来编辑通过映射器正确地到达了模型。那为什么不显示呢?
为了完整起见,从评论中复制:
mapper.to First()
、mapper.setCurrentIndex()
或类似内容必须在 之后调用 列映射以便映射显示任何数据。
我有一个要映射到某些小部件的 AbstractItemModel。在 window 的构造函数中,我有:
print("creating model")
self.model = Model(self.cluster)
print("creating mapper")
self.mapper = QtGui.QDataWidgetMapper()
print("setting model")
self.mapper.setModel(self.model)
print("setting root index")
self.mapper.setRootIndex(self.model.root_index())
print("setting index")
self.mapper.setCurrentIndex(0)
print("mapping widgets")
self.mapper.addMapping(self.realNameLineEdit, 1)
self.mapper.addMapping(self.emailLineEdit, 2)
self.mapper.addMapping(self.infoPlainTextEdit, 3)
print("done")
这导致以下输出:
creating model
Model.__init__()
Model.rowCount(<PySide.QtCore.QModelIndex(0,0,0x7faa2ff446a0,Model(0x17c6f50) ) at 0x7faa2d9ea4c8>) = 0
Model.rowCount(<PySide.QtCore.QModelIndex(0,0,0x7faa2ff446a0,Model(0x17c6f50) ) at 0x7faa2d9d2888>) = 1
creating mapper
setting model
setting root index
Model.root_index()
setting index
Model.rowCount(<PySide.QtCore.QModelIndex(-1,-1,0x0,QObject(0x0) ) at 0x7faa2ff50d08>) = 2
Model.index(0, 0, <PySide.QtCore.QModelIndex(-1,-1,0x0,QObject(0x0) ) at 0x7faa2ff50d08>)
Model.rowCount(<PySide.QtCore.QModelIndex(-1,-1,0x0,QObject(0x0) ) at 0x7faa2d9ea608>) = 2
Model.columnCount(<PySide.QtCore.QModelIndex(-1,-1,0x0,QObject(0x0) ) at 0x7faa2d9ea608>) = 4
mapping widgets
Model.index(0, 1, <PySide.QtCore.QModelIndex(-1,-1,0x0,QObject(0x0) ) at 0x7faa2ff50d08>)
Model.rowCount(<PySide.QtCore.QModelIndex(-1,-1,0x0,QObject(0x0) ) at 0x7faa2d9ea608>) = 2
Model.columnCount(<PySide.QtCore.QModelIndex(-1,-1,0x0,QObject(0x0) ) at 0x7faa2d9ea608>) = 4
Model.index(0, 2, <PySide.QtCore.QModelIndex(-1,-1,0x0,QObject(0x0) ) at 0x7faa2ff50d08>)
Model.rowCount(<PySide.QtCore.QModelIndex(-1,-1,0x0,QObject(0x0) ) at 0x7faa2d9ea608>) = 2
Model.columnCount(<PySide.QtCore.QModelIndex(-1,-1,0x0,QObject(0x0) ) at 0x7faa2d9ea608>) = 4
Model.index(0, 3, <PySide.QtCore.QModelIndex(-1,-1,0x0,QObject(0x0) ) at 0x7faa2ff50d08>)
Model.rowCount(<PySide.QtCore.QModelIndex(-1,-1,0x0,QObject(0x0) ) at 0x7faa2d9ea608>) = 2
Model.columnCount(<PySide.QtCore.QModelIndex(-1,-1,0x0,QObject(0x0) ) at 0x7faa2d9ea608>) = 4
done
对我来说到目前为止看起来是正确的。但是 none 的映射小部件显示任何数据。 Model.data() 甚至根本没有被调用(我在那里也有打印)。
当我在 realNameLineEdit 中输入内容并按 return 时,我得到:
Model.setData(<PySide.QtCore.QModelIndex(0,1,0x7faa2da31908,Model(0x17c6f50) ) at 0x7faa2d9eadc8>, real name, 2)
看起来编辑通过映射器正确地到达了模型。那为什么不显示呢?
为了完整起见,从评论中复制:
mapper.to First()
、mapper.setCurrentIndex()
或类似内容必须在 之后调用 列映射以便映射显示任何数据。