我正在使用pyqt4框架爲數據庫表單做一些顯示。不幸的是,我在嘗試按姓氏過濾和顯示數據庫時遇到了一些障礙。假定數據庫連接起作用。另外,假設我在我的tupleHeader中有正確數量的項目,因爲我對其他方法使用了相同的initializeModel方法(如下面描述的search()函數,並且它工作正常。)我調用display()函數並它工作的很好,但是當從sourceModel創建一個proxyModel,並嘗試使用我的搜索功能顯示proxyModel時,我顯示了空單元格。當我限制搜索以便過濾一半數據庫時,它顯示許多單元格。所以大多數的這工作),但它不會顯示數據庫本身什麼PyQt4:我的數據庫顯示空單元格
下面是我的一些代碼:
from PyQt4 import QtGui, QtCore, QtSql
self.caseSensitivity = QtCore.Qt.CaseInsensitive
self.syntax = QtCore.QRegExp.FixedString
def initializeModel(self, model):
model.setTable(self.table)
#model.setEditStrategy(QtSql.QSqlTableModel.OnManualSubmit)
b = 0
for a in self.tupleHeader:
model.setHeaderData(b, QtCore.Qt.Horizontal, QtGui.qApp.tr(a))
b += 1
model.select()
def display(self):
'''reads all row data and displays it on a tableview'''
self.connectdb(self.db, self.localhost, self.dbname, self.username, self.password)
model = QtSql.QSqlTableModel()
self.initializeModel(model)
self.view.setModel(model)
self.disconnectdb(self.db)
def search(self, searchQuery):
'''queries database data, filters it, and displays it on a tableview'''
sourceModel = QtSql.QSqlTableModel()
proxyModel = QtGui.QSortFilterProxyModel()
self.initializeModel(sourceModel)
proxyModel.setSourceModel(sourceModel) # allows to edit proxyModel without changing underying model
#searchQuery contains the last name that I am filtering with
regExp = QtCore.QRegExp(searchQuery, self.caseSensitivity, self.syntax)
proxyModel.setFilterRegExp(regExp)
proxyModel.setFilterKeyColumn(2) # this column holds the last names
# self.view contains the table itemview my application uses to display the database
self.view.setModel(proxyModel)
編輯:我沒有興趣在保持這段代碼,我只是想知道爲什麼它允許表以顯示錶的內容,而不是一堆空單元格
print self.proxyModel.filterAcceptsRow(2, self.sourceModel)
另外,如果你把在這最後的陳述(self.view.setModel(proxyModel))之後,它會顯示錶,即使它發送一個錯誤:
打印self.proxyModel.filterAcceptsRow(2 self.sourceModel) 類型錯誤:QSortFilterProxyModel.filterAcceptsRow(int,QModelIndex):參數2有意外的類型'QSqlTableModel'
無論參數是什麼或使用filterAcceptsRow ro filterAcceptsColumn都無關緊要,它會顯示錶格。這是否縮小了問題的範圍?
謝謝你的時間尋找這個編碼錯誤/錯誤,並開心狩獵!