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))