Sunt folosind cadrul PyQt4 pentru a face unele ecrane pentru forme de baze de date. Din păcate, am lovit un obstacol în timp ce încerca pentru a filtra și afișa baza mea de date după numele de familie. Să presupunem că conexiunea bazei de date funcționează. De asemenea, presupunem că am cantitatea corectă de articole în tupleHeader meu de când am folosi aceeași metodă initializeModel pentru alte metode (cum ar fi funcția de căutare () descrise mai jos, și funcționează bine.
Eu numesc funcția de afișare () și funcționează perfect bine, dar atunci când se creează un proxyModel din sourceModel, și încercarea de a afișa proxyModel cu funcție de căutare, am celule goale afișate. Când am limitați căutarea mea, astfel încât acesta filtreaza jumătate baza mea de date, se arată că multe celule (astfel încât cea mai mare parte acest lucru este de lucru). Dar nu va afișa nimic din baza de date în sine.
Mai jos este o parte din codul meu:
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: Nu sunt interesat de păstrarea această bucată de cod, vreau doar să știu de ce permite tabel pentru a afișa conținutul tabelului în loc de o grămadă de celule goale
print self.proxyModel.filterAcceptsRow(2, self.sourceModel)
De asemenea, dacă ai pus în această după ultima declarație (self.view.setModel (proxyModel)), se va arăta masa, chiar dacă nu trimite o eroare:
self.proxyModel.filterAcceptsRow print (2, self.sourceModel) TypeError: QSortFilterProxyModel.filterAcceptsRow (int, QModelIndex): Argumentul 2 are tip neașteptat 'QSqlTableModel'
Nu contează ce sunt argumentele sau dacă am folosi filterAcceptsRow ro filterAcceptsColumn, se afișează masa. Asta restrânge problema unele?
Vă mulțumim pentru timpul căutând această codificare eroare / bug-ul, și de vânătoare fericit!