Python PyQt4:我的数据库显示空单元格
我正在使用pyqt4框架对数据库表单进行一些显示。不幸的是,我在尝试按姓氏筛选和显示数据库时遇到了一个障碍。假设数据库连接正常工作。另外,假设我的tupleHeader中有正确数量的项,因为我对其他方法使用了相同的initializeModel方法(如下面描述的search()函数),并且工作正常 我调用display()函数,它工作得非常好,但是当从sourceModel创建一个proxyModel,并尝试使用我的搜索函数显示proxyModel时,我会显示空单元格。当我限制搜索以便它过滤我数据库的一半时,它会显示许多单元格(因此大多数单元格都工作正常)。但它不会显示数据库本身的任何内容 下面是我的一些代码:Python PyQt4:我的数据库显示空单元格,python,qt,qt4,pyqt4,qt4.6,Python,Qt,Qt4,Pyqt4,Qt4.6,我正在使用pyqt4框架对数据库表单进行一些显示。不幸的是,我在尝试按姓氏筛选和显示数据库时遇到了一个障碍。假设数据库连接正常工作。另外,假设我的tupleHeader中有正确数量的项,因为我对其他方法使用了相同的initializeModel方法(如下面描述的search()函数),并且工作正常 我调用display()函数,它工作得非常好,但是当从sourceModel创建一个proxyModel,并尝试使用我的搜索函数显示proxyModel时,我会显示空单元格。当我限制搜索以便它过滤我数
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)
TypeError:QSortFilterProxyModel.filterAcceptsRow(int,QModelIndex):参数2具有意外的类型“QSqlTableModel”
不管参数是什么,也不管我是否使用filterAcceptsRow ro filterAcceptsColumn,它都会显示表格。这是否缩小了问题的范围
感谢您花时间搜索此编码错误/bug,并祝您搜索愉快!虽然我无法找到问题的解决方案,但它自己解决了。我不确定,但我认为正是这段代码片段使它工作起来
self.dbmanip = CoreDB(self.userTableView, self.table)
这是放在Qt4设计器创建的SetupUi()方法中的。我认为包含TableView的dbmanip丢失了proxyModel中的信息,或者(更可能的是),我可能在proxyModel和原始模型(创建proxyModel的)之间引用了错误的表,然后无法显示,因为它从一个表调用单元格结构,从另一个表调用实际信息
虽然这些都是猜测,但问题还是解决了