pyQt QTableView不显示数字(int,float等)

时间:2013-04-08 16:49:40

标签: python filter pyqt qtableview

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

非常感谢任何见解!

干杯,

2 个答案:

答案 0 :(得分:1)

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

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

最后,当你对它们进行排序时,一切都会成功。唯一的缺点是:

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

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

答案 1 :(得分:0)

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