我正在使用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都无关紧要,它会显示表格。这是否缩小了问题的范围?
谢谢你的时间寻找这个编码错误/错误,并开心狩猎!