【问题标题】:PyQt: QDataWidgetMapper doesn't show any data in widgetsPyQt:QDataWidgetMapper 在小部件中不显示任何数据
【发布时间】:2015-05-29 13:45:09
【问题描述】:

我有一个 AbstractItemModel 我想映射到一些小部件。在窗口的构造函数中我有:

    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

对我来说,到目前为止看起来是正确的。但是没有一个映射的小部件显示任何数据。 Model.data() 甚至根本没有被调用(我也有打印)。

当我在 realNameLineEdit 中输入内容并按回车键时,我得到:

Model.setData(<PySide.QtCore.QModelIndex(0,1,0x7faa2da31908,Model(0x17c6f50) )   at 0x7faa2d9eadc8>, real name, 2)

看起来编辑通过映射器正确地传递到模型。那为什么不显示呢?

【问题讨论】:

  • 将一个 QTableView 连接到模型,看看它实际上是否包含任何数据。并尝试在建立映射后调用self.mapper.toFirst()
  • 我有一个 QComboBox 可以正确显示条目(第 0 列)。还要注意 rowCount() 返回 2。self.mapper.toFirst() 除了self.mapper.setCurrentIndex(0) 之外还有什么作用吗?
  • after 是解决方案。

标签: python-3.x pyqt pyqt4


【解决方案1】:

为了完整起见,从 cmets 复制: mapper.to First()mapper.setCurrentIndex() 或类似名称必须在建立列映射后调用,以便映射显示任何数据。

【讨论】:

    猜你喜欢
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    • 2016-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多