2013-04-08 284 views
0

我有QTableView的问题,并将数据放入它。文本(字符串)显示精细,并且可以使用代理和QStandardItemModel进行排序和筛选pyQt QTableView不显示数字(int,float等)

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和数据源自SQLite数据库使用自己写的查询包装,而不是QtSQL。

任何见识都被赞赏!

干杯,

回答

0

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

+0

谢谢,这确实有效,但是,排序是不正确的,因为例如, 10之后不是11,而是100。另外,我怀疑间隔上的过滤将起作用。如果我错了,请纠正我。整个QTableView只能用字符串工作吗? – 2013-04-08 21:26:57

+0

像QTableView这样的数据显示小部件,QListView仅将QString作为其addItem方法的输入。您可以在将项目转换为字符串并将其插入表格之前进行排序。 – scottydelta 2013-04-08 21:52:36

1

我找到了一个有点优雅的解决方案。只要更小心你如何格式化你的数字字符串。在前面添加空格作为0位数的占位符。所以,如果你想你的号码是长度为10名的字符串与4位小数位:

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

最后,当你对它们进行排序一切顺利。唯一的缺点是:

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

  2. 它给它一个右对齐的外观。