PyQt4: Baza mea de date afișează celule goale

voturi
48

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!

Întrebat 08/06/2010 la 11:56
de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
0

Deși nu am putut găsi soluția la problema mea, ea însăși rezolvată. Nu sunt sigur, dar cred că a fost acest fragment de cod care a făcut să funcționeze.

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

Acest lucru a fost pus în interiorul metodei SetupUi () creat de Qt4 Designer. Cred fie dbmanip care conținea TableView a pierdut informațiile din proxyModel, sau (mai probabil), poate am referit tabelul greșit între proxyModel și modelul original (care a creat proxyModel), și apoi nu a putut afișa, deoarece a fost de asteptare structura de celule dintr-un tabel și informațiile reale de la o alta.

Acestea sunt toate presupuneri, totuși. Cu toate acestea, problema rezolvată.

Publicat 10/06/2010 la 12:15
sursa de către utilizator

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