Sto usando il quadro PyQt4 per fare alcuni monitor per forme di database. Purtroppo, mi ha colpito un intoppo durante il tentativo di filtrare e visualizzare la mia base di dati in base al cognome. Si supponga che la connessione al database funziona. assumere anche che ho la giusta quantità di elementi a mio tupleHeader dato che io uso lo stesso metodo initializeModel per altri metodi (come la funzione di ricerca () descritto qui di seguito, e funziona benissimo.
Ho chiamare la funzione di visualizzazione () e funziona perfettamente bene, ma quando si crea un proxyModel dal sourceModel, e cercando di visualizzare il proxyModel con la mia funzione di ricerca, ho celle vuote visualizzate. Quando limito la ricerca in modo che filtra metà del mio database, si dimostra che molte cellule (quindi la maggior parte di questo sta lavorando). Ma non visualizzerà nulla dal database stesso.
Di seguito alcune del mio codice:
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: Io non sono interessato a mantenere questo pezzo di codice, voglio solo sapere perché permette al tavolo per visualizzare il contenuto della tabella invece di un gruppo di celle vuote
print self.proxyModel.filterAcceptsRow(2, self.sourceModel)
Inoltre, se si mette in questo dopo l'ultima istruzione (self.view.setModel (proxyModel)), mostrerà al tavolo, anche se non inviare un errore:
stampa self.proxyModel.filterAcceptsRow (2, self.sourceModel) TypeError: QSortFilterProxyModel.filterAcceptsRow (int, QModelIndex): argomento 2 ha Tipo inaspettato 'QSqlTableModel'
Non importa ciò che gli argomenti sono o se io uso filterAcceptsRow ro filterAcceptsColumn, visualizza la tabella. Questo circoscrivere il problema un po '?
Grazie per il vostro tempo alla ricerca di questo errore di codificazione / bug, e la caccia felice!