Python PyQt5:设置QStandardItem的数据

Python PyQt5:设置QStandardItem的数据,python,qt,pyqt,qtreeview,qstandarditem,Python,Qt,Pyqt,Qtreeview,Qstandarditem,如果我像这样构造一个QStandardItem: item = QtGui.QStandardItem('Item Name') 当将此项目添加到QStandardItemModel模型中,并在QTreeView中查看时,我会得到一个显示项目名称的单元格。但是,当我构建一个类似于: item = QtGui.QStandardItem() item.setData(123) 我得到了一个空单元格,但我仍然可以通过调用来调用数据: print(item.data()) 我会得到号码123。如

如果我像这样构造一个
QStandardItem

item = QtGui.QStandardItem('Item Name')
当将此项目添加到
QStandardItemModel
模型中,并在
QTreeView
中查看时,我会得到一个显示
项目名称的单元格。但是,当我构建一个类似于:

item = QtGui.QStandardItem()
item.setData(123)
我得到了一个空单元格,但我仍然可以通过调用来调用数据:

print(item.data())

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

传递给
QStandardItem
构造函数的参数设置单元格的数据。因此,等效方法为:

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

但是,如果您希望以原始数据类型存储数据,而不是首先将其转换为字符串,则可以使用
QStyledItemDelegate
控制原始数据的显示方式:

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

view.setItemDelegate(ItemDelegate(view))

item.setData(str(123))
。但我需要它是一个可编辑的数字,而且我不能依赖字符串到浮点的转换。我不明白为什么如果我直接从模型中设置数据:
model.setData(model.index(0,1),123.987)
它会显示数字,但是如果我在
QStandardItem
上这样做就不会了。我也只是尝试了你的建议,它也不起作用。要我粘贴一个可运行的示例程序吗?我只是觉得如果这是一个简单的答案,这个问题可能太难回答了。忘记了角色:
item.setData(str(123),QtCore.Qt.DisplayRole)
(与
item.setText(str(123))
)。但你也看到了,你是一个传奇。因此,数据基本上是存在的,但要显示它,必须将其显示为
QString
,这是通过在设置数据时指定角色来完成的。角色是您分配给项目的数据类型(工具提示/显示等)。如果您愿意将此作为回答,我将接受。
class ItemDelegate(QStyledItemDelegate):
    def displayText(self, value, locale):
        if isinstance(value, float):
            return '%08f' % value
        return value

view.setItemDelegate(ItemDelegate(view))