Estoy utilizando el marco PyQt4 que hacer algunos arreglos para las formas de bases de datos. Por desgracia, me golpeó con un obstáculo al tratar de filtrar y mostrar mi base de datos por el apellido. Supongamos que la conexión de base de datos funciona. También se supone que tengo la cantidad correcta de artículos en mi tupleHeader desde que uso el mismo método initializeModel por otros métodos (como la función de búsqueda () se describe a continuación, y funciona bien.
Debo llamar a la función de visualización () y funciona perfectamente bien, pero cuando se crea un proxyModel del sourceModel, y tratando de mostrar la proxyModel con mi función de búsqueda, tengo celdas vacías muestran. Cuando puedo restringir mi búsqueda para que filtra la mitad de mi base de datos, muestra que muchas células (por lo que la mayor parte de esto está funcionando). Pero no va a mostrar algo de la propia base de datos.
A continuación se muestra una parte de mi código:
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)
EDIT: No estoy interesado en mantener este pedazo de código, sólo quiero saber por qué se permite la tabla para mostrar el contenido de la tabla en lugar de un grupo de celdas vacías
print self.proxyModel.filterAcceptsRow(2, self.sourceModel)
Además, si se pone en esto después de la última instrucción (self.view.setModel (proxyModel)), se mostrará la tabla, incluso si envía un error:
self.proxyModel.filterAcceptsRow de impresión (2, self.sourceModel) TypeError: QSortFilterProxyModel.filterAcceptsRow (int, QModelIndex): argumento 2 tiene tipo inesperado 'QSqlTableModel'
No importa cuáles son los argumentos o si yo utilizo filterAcceptsRow ro filterAcceptsColumn, muestra la tabla. ¿Esto a reducir el problema alguno?
Gracias por su tiempo en busca de este error / fallo de codificación, y la caza feliz!