【问题标题】:PyQt5: Setting data for a QStandardItemPyQt5:为 QStandardItem 设置数据
【发布时间】:2017-06-30 21:11:58
【问题描述】:

如果我像这样构造一个QStandardItem

item = QtGui.QStandardItem('Item Name')

当将此项目添加到 QStandardItemModel 模型并在 QTreeView 中查看时,我会看到一个显示 Item Name 的单元格。但是,当我构造一个像:

item = QtGui.QStandardItem()
item.setData(123)

我得到一个空单元格,但我仍然可以通过调用调用数据:

print(item.data())

我会得到号码123。如何让数字实际显示在单元格中?

【问题讨论】:

  • item.setData(str(123)).
  • 我需要它是一个可编辑的数字,但我不能依赖字符串来浮动转换。我不明白为什么如果我直接从模型中设置数据:model.setData(model.index(0,1),123.987) 它会显示数字,但如果我在 QStandardItem 上执行它就不会。
  • 另外我刚刚尝试了你的建议,它也不起作用。要我粘贴一个可运行的示例程序吗?我只是觉得如果是一个简单的答案,这个问题可能太多了。
  • 忘记了角色:item.setData(str(123), QtCore.Qt.DisplayRole)(与item.setText(str(123))相同)。但也请参阅this answer
  • 你是个传奇。所以基本上数据就在那里,但要显示它必须显示为QString,这是通过在设置数据时指定角色来完成的。角色是您分配给项目的数据类型(工具提示/显示等)如果您愿意将其写为答案,我会接受。

标签: python qt pyqt qtreeview qstandarditem


【解决方案1】:

传递给QStandardItem 构造函数的参数设置DisplayRole 的数据。所以等效的方法是:

item.setData(str(123), QtCore.Qt.DisplayRole)

或:

item.setText(str(123))

但是如果你想将数据存储在它的原始数据类型中,而不是先将其转换为字符串,你可以使用QStyledItemDelegate来控制原始数据的显示方式:

class ItemDelegate(QStyledItemDelegate):
    def displayText(self, value, locale):
        if isinstance(value, float):
            return '%08f' % value
        return value

view.setItemDelegate(ItemDelegate(view))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    相关资源
    最近更新 更多