PyQt4: Mi base de datos muestra las celdas vacías

votos
48

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!

Publicado el 08/06/2010 a las 11:56
por usuario
En otros idiomas...                            


1 respuestas

votos
0

Si bien no pude encontrar la solución a mi problema, que se resolvió solo. No estoy seguro, pero creo que fue este fragmento de código que hace que funcione.

self.dbmanip = CoreDB(self.userTableView, self.table)

Esto fue puesto en el interior del método setupUi (), creado por el diseñador Qt4. Creo que ya sea el dbmanip que contenía el TableView perdido la información de la proxyModel, o (más probablemente), que puede haber referenciado la mesa equivocada entre el proxyModel y el modelo original (que creó el proxyModel), y luego no podía mostrar porque se llama la estructura celular de una tabla y la información real de otro.

Estas son todas las conjeturas sin embargo. Aún así, problema resuelto.

Respondida el 10/06/2010 a las 12:15
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more