2013-04-08 278 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. 它給它一個右對齊的外觀。