PyQt4: Mijn databank toont lege cellen

stemmen
48

Ik gebruik de PyQt4 framework om een ​​aantal displays voor database-formulieren te doen. Helaas, ik raakte een addertje onder het gras terwijl het proberen te filteren en mijn gegevensbestand weer te geven op achternaam. Neem aan dat de database connectie werkt. Neem ook aan dat ik de juiste hoeveelheid punten in mijn tupleHeader sinds ik hetzelfde initializeModel methode voor andere methoden te gebruiken (zoals de functie zoeken () hieronder beschreven, en het werkt prima.

Ik roep de functie display () en het werkt prima, maar bij het maken van een proxyModel uit de sourceModel, en proberen om de proxyModel met mijn zoekfunctie weer te geven, ik heb lege cellen weergegeven. Toen ik ervoor dat mijn zoekopdracht zodat deze de helft van mijn gegevensbestand filtert, het laat zien dat veel cellen (dus de meeste van deze werkt). Maar het zal niet iets van de database zelf weer te geven.

Hieronder vindt u een aantal van mijn code:

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: Ik ben niet geïnteresseerd in het houden van dit stukje code, ik wil gewoon weten waarom het mogelijk maakt de tafel om de inhoud van de tabel in plaats van een bos van lege cellen vertonen

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

Ook, als je in dit na de laatste verklaring (self.view.setModel (proxyModel)), zal de tabel geven, zelfs als het u een foutmelding:

afdruk self.proxyModel.filterAcceptsRow (2, self.sourceModel) TypeError: QSortFilterProxyModel.filterAcceptsRow (int, QModelIndex): argument 2 heeft onverwachte type 'QSqlTableModel'

Het maakt niet uit wat de argumenten zijn of dat ik gebruik filterAcceptsRow ro filterAcceptsColumn, toont de tabel. Betekent dit een beperking van het probleem wat?

Dank u voor uw tijd aan het zoeken voor deze codering fout / bug, en gelukkig jacht jou!

De vraag is gesteld op 08/06/2010 om 11:56
user
In andere talen...                            


1 antwoorden

stemmen
0

Terwijl ik de oplossing voor mijn probleem niet kon vinden, loste zich. Ik ben niet zeker, maar ik denk dat het dit stukje code dat maakte het werk.

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

Dit is de binnenkant van de methode SetupUi () gecreëerd door de Qt4 Designer zetten. Ik denk dat ofwel de dbmanip dat de TableView bevatte uit de proxyModel verloor de informatie, of (waarschijnlijker), kan ik de verkeerde tafel hebben verwezen tussen de proxyModel en de originele model (dat de proxyModel gemaakt), en dan kon niet weergeven omdat het was het aanroepen van de celstructuur van de ene tafel en de actuele informatie van een ander.

Dit zijn allemaal gissingen wel. Toch, probleem opgelost.

antwoordde op 10/06/2010 om 12:15
bron van user

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