PyQt4: Databasen min viser tomme celler

stemmer
48

Jeg bruker pyqt4 rammeverk for å gjøre noen skjermer for databaseskjemaer. Dessverre, jeg traff en ulempe mens du prøver å filtrere og vise min database ved etternavn. Anta at databasen tilkoblingen fungerer. Også anta at jeg har riktig mengde elementer i min tupleHeader siden jeg bruker samme initializeModel metode for andre metoder (som søk () -funksjonen beskrevet nedenfor, og det fungerer fint.

Jeg kaller displayet () -funksjonen og det fungerer helt greit, men når du oppretter en proxyModel fra sourceModel, og prøver å vise proxyModel med min søkefunksjon, har jeg tomme celler vises. Når jeg begrense søket mitt slik at det filtrerer halve database, viser det at mange celler (slik at det meste av dette fungerer). Men det vil ikke vise noe fra selve databasen.

Nedenfor er noen av min kode:

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: Jeg er ikke interessert i å holde denne delen av koden, jeg vil bare vite hvorfor det gir bordet for å vise tabellens innhold i stedet for en haug med tomme celler

print self.proxyModel.filterAcceptsRow(2, self.sourceModel)

Også, hvis du putter i dette etter den siste setningen (self.view.setModel (proxyModel)), vil den vise tabellen, selv om det ikke send en feil:

print self.proxyModel.filterAcceptsRow (2, self.sourceModel) Feiltype: QSortFilterProxyModel.filterAcceptsRow (int, QModelIndex): argument 2 har uventet type 'QSqlTableModel'

Det spiller ingen rolle hva argumentene er eller om jeg bruker filterAcceptsRow ro filterAcceptsColumn, viser den tabellen. Betyr dette begrense problemet noen?

Takk for din tid på å lete etter denne kodefeil / feil, og lykkelig jakt!

Publisert på 08/06/2010 klokken 10:56
bruker
På andre språk...                            


1 svar

stemmer
0

Selv om jeg ikke kunne finne løsningen på problemet mitt, det løste seg. Jeg er ikke sikker, men jeg tror det var denne kodebiten som gjorde det arbeidet.

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

Dette ble satt inne i SetupUi () -metoden skapt av Qt4 Designer. Jeg tror enten dbmanip som inneholdt Tableview tapt informasjon fra proxyModel, eller (mer sannsynlig), jeg kan ha referert feil bord mellom proxyModel og den opprinnelige modellen (som skapte proxyModel), og da kunne ikke vise fordi det var å rope cellestrukturen fra én tabell og faktiske opplysninger fra en annen.

Disse er alle gjetninger om. Likevel, problemet løst.

Svarte 10/06/2010 kl. 11:15
kilden bruker

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