PyQt5:为 QStandardItem 设置数据

PyQt5: Setting data for a QStandardItem

如果我像这样构造一个 QStandardItem

item = QtGui.QStandardItem('Item Name')

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

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

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

print(item.data())

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

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

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

或:

item.setText(str(123))

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

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

view.setItemDelegate(ItemDelegate(view))