0

我在使用 QTableView 并将数据放入其中时遇到问题。文本(字符串)显示良好,可以使用代理和 QStandardItemModel 进行排序和过滤

 self.material_model = QtGui.QStandardItemModel(self)
 self.proxy = QtGui.QSortFilterProxyModel(self)
 self.proxy.setSourceModel(self.material_model)
 self.t_material.setModel(self.proxy)

但是,如果我尝试将数字/值放入表中,则使用以下代码段根本不会显示:

for row in xrange(0, len(self.material.data)):
    item = QtGui.QStandardItem(str(self.material.data[row]['name']))
    self.material_model.setItem(row, 0, item)

    item2 = QtGui.QStandardItem()
    item2.setData(QtCore.Qt.DisplayRole,float(999.99))
    self.material_model.setItem(row, 1, item2)

我尝试了几种变体,包括 Qt.DisplayRole 而不是 Qt.EditRole。但从其他帖子中我感觉,并非所有方法和功能都在 pyQt 中实现,因此犹豫是否玩太多(不过我已经投入了几个小时)。现在我希望你能帮助我解决这个问题。也许,我的方法不适合我尝试做的事情,它基本上是按文本(名称)和值(间隔)过滤内容。我正在使用 pyQt,Windows7,数据来自使用自写查询包装器而不是 QtSQL 的 SQLite DB。

任何见解表示赞赏!

干杯,

4

2 回答 2

1

我找到了一个有点优雅的解决方案。请更加小心如何格式化数字字符串。在前面添加空格作为 0 位的占位符。因此,如果您希望您的数字长度为 10 个带有 4 个小数空格的字符串:

float_as_str = "{:10.4f}".format(float_i_started_with)

最后,当您对它们进行排序时,一切都会解决。唯一的缺点是:

  1. 您必须明确告诉它您的数字的最大长度是多少。在这种情况下,它将对 < 10^6 的任何数字进行排序(6 来自 10-4)。

  2. 它使它具有右对齐的外观。

于 2014-11-17T20:33:39.127 回答
0

在将数字插入表格之前尝试将它们转换为字符串,它不会影响您的程序,因为它只是用于显示目的。

于 2013-04-08T18:58:04.770 回答